6章 継承とインタフェース Flashcards
差分プログラミング
継承により、スーパークラスからサブクラスに引き継がれたメンバの差分のみを定義して機能の拡張をすること。
サブクラスの宣言
extendsを使用してスーパークラスを1つだけ指定します。
[ 修飾子 ] class サブクラス名 extends スーパークラス名 {}
オーバーライド
サブクラス内からアクセス可能なスーパークラスのメソッドを再定義すること。
以下の条件を満たす必要がある
・メソッドのシグネチャ(メソッド名、引数リスト):同一
・戻り値の型:同一、または、サブクラスの型
・アクセス修飾子:同一、または、より公開範囲の広い修飾子
アクセス修飾子 戻り値 メソッド名(引数リスト) {}
super.アクセスしたいメンバ
サブクラスのメソッドの中でスーパークラスのメンバにアクセス
superは、現在のオブジェクトのスーパークラスのオブジェクトを意味する。
アノテーション
Javaでクラスやメソッド、フィールドなどに特別な情報(メタデータ「「このデータはどういうものか」を説明するためのデータ」)を付けるための仕組み
@Override
Javaで「メソッドのオーバーライド(上書き)」を明示するために使うアノテーションです。
親クラスやインターフェースで定義されているメソッドを、子クラスで再定義するときに使います。
メソッド名やシグネチャを間違えたときに、コンパイルエラーになるのでミスを防げる。
finalメソッドの宣言
サブクラスでメソッドのカスタマイズされたくない場合にメソッド宣言にfinal修飾子を指定することでメソッドのオーバーライドを禁止できます。
[ 修飾子 ] final 戻り値の型 メソッド名(引数リスト){}
finalクラスの宣言
クラスの宣言にfinal修飾子を指定することで継承を禁止します。
[ 修飾子 ] final class クラス名{}
Objectクラス
Javaで定義されているすべてのクラスの親クラス。
Javaで作成するクラスは、明示的に指定しなくてもObjectクラスを継承しています。
レコードクラス
「データの保持」に特化したクラスを簡単に定義するための仕組み。
・getter・equals()・hashCode()・toString() などが自動生成される
・finalであるため、サブクラスを作れない
・インスタンスは不変(immutable)になる
レコードクラスの作成
[ 修飾子 ] recode レコード名 ( [ コンポーネント ] ) { [ 本文 ] }
実装
メソッド処理を記述すること
抽象メソッド
メソッド宣言のみを行い、実装を持たないメソッド
抽象クラス
抽象メソッドを持つことができるクラス
具象メソッド
実装を持つメソッド
具象クラス
インスタンス化ができるクラス
抽象メソッドの作成
[ 修飾子 ] abstract 戻り値 メソッド名 (引数リスト);
抽象リストの作成
[ 修飾子 ] abstract class クラス名 {}
インタフェース
関連するクラスが持つべき操作を定める仕組み
インタフェース自体は「実装」を持たない(デフォルトメソッドを除く)
・ インタフェースを実装するクラスは、インタフェースで定義されたすべてのメソッドを実装する必要がある
・ Javaでは多重継承ができないが、複数のインタフェースは実装可能
・ インタフェースに定義できるのは主に次の3種類
1,抽象メソッド(実装なし)
2,定数フィールド(public static final で暗黙的に修飾)
3,デフォルトメソッド(default 付きで実装できる)
インタフェースの作成
[ 修飾子 ] interface インターフェース名 [ extends インタフェース ] {}
インタフェースの実装
[ 修飾子 ] class クラス名 implements インタフェース名 {}
インタフェースのdefaultメソッド
メソッドがオーバーライドされない場合のデフォルトの実装
[ 修飾子 ] default 戻り値の型 メソッド名 (引数リスト) {}
インタフェースのstaticメソッド
実装クラスを利用可能な具象メソッド
[ 修飾子 ] static 戻り値の型 メソッド名 (引数リスト) {}
インタフェースのprivateメソッド
インタフェース内でコードの共通処理をまとめるためのメソッド
private [ static ] 戻り値の型 メソッド名 (引数リスト) {}