独習Java 6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一 6.4 継承とメソッド オーバーライドされたメソッド・・・スーパークラスのメソッドを隠す スーパークラスで定義された元のメソッドを使う場合どうすればよい?? スーパークラスのメソッドの参照:super.mthName ( args ) mthName : スーパークラスのメソッド名 args : 省略可能な引数の並び サブクラスからスーパークラスの機能にアクセス ・・・ サブクラスの処理を完了する前か後で、 スーパークラスのメソッドを呼び出す必要がある コードを効率的に再利用できる プログラム例[1] class I1 { void hello(String s){ System.out.println("I1: " + s); } } class J1 extends I1 { void hello(String s){ super.hello(s); System.out.println("J1: " + s); } } 継承関係にある3つのクラスを宣言 helloメソッドによりユーザへの挨拶を表示する J1クラスはI1ク ラスを拡張 スーパークラスの メソッドの参照 class SuperForM1{ public static void main(String args[]){ System.out.println("Instantiating I1"); I1 obj = new I1(); obj.hello("Good morning"); System.out.println("Instantiating J1"); obj = new J1(); obj.hello("Good afternoon"); } } 出力結果: Instantiating I1 I1: Good morning Instantiating J1 I1: Good afternoon J1: Good afternoon 6.5 継承とコンストラクタ クラスの状態と動作・・・そのクラスだけでなく、スーパークラスにも定義 オブジェクトを適切に初期化するには、 スーパークラスのコンストラクタも実行しなければならない スーパークラスのコンストラクタの呼び出し:super( args ); args : 省略可能な引数のリスト コンパイラが並びをチェックし、スーパークラスのどのコンストラクタ を呼び出すのかを判断 this( args );・・・同一クラスのコンストラクタの呼び出し(前章) コンストラクタの最初のステートメントでなければならない コンストラクタの最初のステートメントでなければならない ⇒ super()とthis()の両方を使うことはできない ※どちらも使わず、別のコンストラクタを明示的に呼び出さないときはコンパイラに よりsuper()が呼び出される プログラム例[2] 継承階層でsuper()を明示的に使っているプログラムの例 class S2 { ・T2クラスはS2クラスを拡張 int s2; ・T2のコンストラクタは、2つの引数を受け取り、 S2(int s2) { this.s2 = s2; super()を呼び出しS2のコンストラクタを呼び出す。 } 出力結果: } class T2 extends S2 { t2.s2 = 1 int t2; t2.t2 = 2 T2(int s2, int t2) { super(s2); 引数s2をS2のコンストラクタへ渡す this.t2 = t2; } } class InheritanceAndConst2 { public static void main(String args[]) { T2クラスをインスタンス化 T2 t2 = new T2(1, 2); System.out.println(“t2.s2 = “ + u2.s2); System.out.println(“t2.t2 = “ + u2.t2); } } 課題 ●(x,y)座標を持つ2つの点の間の距離を求めるプログラムを 作成しなさい。 条件 ・座標の値はあらかじめメソッド内で定義しておいてかまわない。 ・各点ごとにある形式のクラスのオブジェクトを作成し、それを距離計算 用のメソッドへ送り計算させること。 ・x座標とy座標それぞれのコンストラクタを作成すること(p187,例 6.5‐2参照)。
© Copyright 2024 ExpyDoc