※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

基本 クラス継承

既存のクラス(スーパークラス)から新しいクラス(サブクラス)を作成
スーパークラス+α=サブクラス

1.サブクラスの宣言
スーパークラスを拡張してサブクラスを宣言
サブクラスはスーパークラスのメンバを継承
class サブクラス名 extends スーパークラス名
{
 サブクラス追加フィールド
 サブクラスコンストラクタ
 サブクラス追加メソッド
}


2.スーパークラスのコンストラクタ(初期化指定)
  • 未指定の場合
サブクラスのオブジェクトが作成されたとき、サブクラスのコンストラクタ内の先頭で、スーパークラスの引数のないコンストラクタをコール。
  • super() で指定
サブクラスのコンストラクタの先頭で super(a, b); のように記述するとスーパークラスの引数のあるコンストラクタをコール。

this()とsuper()はどちらもコンストラクタの先頭行に記述となるため、排他記述。

3.protected、super.
  • スーパークラスのprivateメンバには、サブクラスからアクセス不可
  • スーパークラスのprotectedメンバには、サブクラスからアクセス可
  • サブクラス内で super.スーパークラスのメソッド とするとスーパークラスのメソッドをコール
  • サブクラスからスーパークラスの同じ名前のメンバにアクセスする場合は、super.を付ける。
  • 関連:クラス内でインスタンス変数とローカル変数が重複する場合、this. をつけるとインスタンス変数、つけないとローカル変数。

4.メソッドのオーバーライド
サブクラスでスーパークラスのメソッドをオーバーライド可
オーバーロードとの違いに注意。

5.スーパークラス変数とサブクラスオブジェクト
こんな記述もできるのは良いけど、自分の中ではどっちかに統一して書いた方がいいよねぇ。
  • サブクラス変数でオブジェクト
SubAbc subabc1;
subabc1 = new SubAbc();
  • スーパークラス変数でオブジェクト
Abc abc1;
abc1 = new SubAbc();
オブジェクトをさす変数のクラスに関係なく、適切なメソッドをコール。

同様にスーパークラスの配列変数に対して、スーパークラスとサブクラスのオブジェクトを作成可。

6.final
  • メソッドに指定した場合、サブクラスでオーバーライド不可
  • フィールドに指定した場合、値変更不可。この場合、フィールドは必ず初期化すること。定数となる。
  • クラスに指定した場合、サブクラス拡張不可

7.interface
1つのスーパークラスから複数のサブクラス拡張生成可。
複数のスーパークラスから1つのサブクラスの生成は不可。=>interface

8.Objectクラス
スーパークラスを指定しないクラスは、Objectクラスのサブクラスになる。
すなわち、すべてのクラスはObjectクラスを継承。

9.Objectクラスの主なメソッド
  • boolean equals(Object obj) :オブジェクトが引数と同じか判断
  • Class getClass() :オブジェクトのクラスを返す
  • String toString() :オブジェクトのあらわす文字列を返す