「基本-継承」(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() :オブジェクトのあらわす文字列を返す
*基本 クラス継承
既存のクラス(スーパークラス)から新しいクラス(サブクラス)を作成
スーパークラス+α=サブクラス
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() :オブジェクトのあらわす文字列を返す
表示オプション
横に並べて表示:
変化行の前後のみ表示: