「基本-継承」の編集履歴(バックアップ)一覧に戻る

基本-継承 - (2008/10/25 (土) 15:57:17) のソース

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

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() :オブジェクトのあらわす文字列を返す






 
記事メニュー
目安箱バナー