継承とは
新しい機能を作るとき、以前作成した機能と共通する部分を引き継ぐ事
継承を用いたクラスの定義
class クラス名 extends 継承元となるクラス名 { 親クラスとの「差分」メンバ }
継承関係
継承元のクラスと継承先のクラスの関係のこと
- スーパークラス 親クラス、基底クラス とも呼ぶ。 継承元
- サブクラス 子クラス、派生クラスとも呼ぶ。 継承先
多重継承の禁止
Javaでは、複数のクラスを親として一つの子クラスを定義する 多重継承を禁止している
オーバーライド
親クラスを継承して子クラスを宣言する際に、 親クラスのメンバを子クラス側で上書きすることを オーバーライドと呼ぶ
継承を用いて子クラスに宣言されたメンバの扱い
- 親クラスに同じメンバがなければ、そのメンバは「追加」になる
- 親クラスに同じメンバがあれば、そのメンバは「上書き変更」される
継承、オーバーライドの禁止
宣言時にfinalが付けられたメソッドは、子クラスでオーバーライドができない
インスタンスの多重構造
継承を用いて作成されたインスタンスは、 継承元のインスタンスを内部に保有する多重構造になっている。 ※親・子・孫と3つのクラスが継承関係にある場合、孫クラスのインスタンスは 3重構造となる。
継承元の親クラスの利用
superとは、「今より1つ内側のインスタンス部分」を表す予約語。 これを使用して親インスタンス部分のメソッドやフィールドに 子インスタンス部分からアクセスすることができる
しかし、自分が孫クラスである場合、親の親クラスのインスタンス部分には 直接アクセスすることはできない
継承されたクラスのインスタンス
- 内部に親クラスのインスタンスを持つ多重構造である
- より外側のインスタンス部分に属するメソッドが優先的に動作する
- 外側のインスタンス部分に属するメソッドは、superを用いて 1つだけ内側のインスタンス部分のメンバにアクセスできる