第7章 クラスの継承 (Java)
継承
- extendsキーワードにより他のクラスを継承することができる。
- 継承元をスーパークラス(親クラス)、継承先をサブクラス(子クラス)という。
- サブクラスはスーパークラスのフィールドとメソッドを引き継ぐ。
- サブクラスは、機能を追加してスーパークラスを拡張できる。
継承ツリー
- 継承ツリーの中で子孫は、すべての先祖の機能を引き継ぐ。
- 継承は、単一継承である。
継承されないもの
- オブジェクトの中に取り込まれないもの(classファイルの中にあるもの)
- コンストラクタ
- 静的メンバ(static修飾されたメンバ)——–クラス変数、クラスメソッド
- 制限があって化粧できないもの
- final修飾されたクラス(例:Stringクラス)
- privateアクセスのメンバ
Objectクラス
- クラス宣言にextendsがなければ「extends Object」が挿入される。
- Java言語のすべてのクラスは、Objectクラスのサブクラスである。
継承とデフォルトコンストラクタ
クラスにコンストラクタが定義していない時、コンパイラがデフォルトコンストラクタを暗黙の内に作成する。
———————デフォルトコンストラクタの形—————
public コンストラクタ名(){
super(); //スーバークラスのコンストラクタを呼び出す。
}
————————————————————————–
自動的に挿入されるsuper();は引きスのないスーパーコンストラクタの呼び出しである。
デフォルトコンストラクタにsuper()が書かれるのは、自分のクラスでは特に初期化作業がなくても、スーパークラスの初期化を行わなければならないかれである。
コンストラクタの生成規則
Objectクラスを除くすべてのコンストラクタは、実行に先だってスーパークラスのコンストラクタを呼び出さなければならない。
明示的なスーパーコンストラクタの呼び出し
- スーパークラスで引数のあるコンストラクタが定義されている時、サブクラスは引数を持つスーパークラスの呼び出しを書かなければならい。
- super(—–)はコンストラクタの先頭行に書かなければならない。
アクセス修飾子
- public
- すべてのクラスからアクセスできる。
- protected
- 同じパッケージ内のクラスとサブクラスからアクセスできる。
- 指定なし(デフォルト)
- 同じパッケージ内のクラスからアクセスできる。
- private
- 同じクラス内からのみアクセスできる。