コツコツ学習ブログ

プログラマのweb上のメモ的なもの

継承

継承とは

新しい機能を作るとき、以前作成した機能と共通する部分を引き継ぐ事

継承を用いたクラスの定義

class クラス名 extends 継承元となるクラス名 { 親クラスとの「差分」メンバ }

継承関係

継承元のクラスと継承先のクラスの関係のこと

- サブクラス 子クラス、派生クラスとも呼ぶ。 継承先

多重継承の禁止

Javaでは、複数のクラスを親として一つの子クラスを定義する 多重継承を禁止している

オーバーライド

親クラスを継承して子クラスを宣言する際に、 親クラスのメンバを子クラス側で上書きすることを オーバーライドと呼ぶ

継承を用いて子クラスに宣言されたメンバの扱い

  • 親クラスに同じメンバがなければ、そのメンバは「追加」になる
  • 親クラスに同じメンバがあれば、そのメンバは「上書き変更」される

継承、オーバーライドの禁止

宣言時にfinalが付けられたメソッドは、子クラスでオーバーライドができない

インスタンスの多重構造

継承を用いて作成されたインスタンスは、 継承元のインスタンスを内部に保有する多重構造になっている。 ※親・子・孫と3つのクラスが継承関係にある場合、孫クラスのインスタンスは 3重構造となる。

継承元の親クラスの利用

superとは、「今より1つ内側のインスタンス部分」を表す予約語。 これを使用して親インスタンス部分のメソッドやフィールドに 子インスタンス部分からアクセスすることができる

しかし、自分が孫クラスである場合、親の親クラスのインスタンス部分には 直接アクセスすることはできない

継承されたクラスのインスタンス

コンストラクタの動作

  • 多重構造のインスタンスが生成されると、JVMは自動的に 一番外側のコンストラクタを呼ぶ 
  • 全てのコンストラクタは、先頭で「親インスタンス部分のコンストラクタ」 を呼び出す必要がある
  • コンストラクタの先頭にsuper()がなければ暗黙的に 「super();」が追加される