Javaプログラミング初心者のためのページ -13ページ目

オーバーライド(5) :コンストラクタとの比較

スーパークラスで定義したメソッドをサブクラスで再定義することをメソッドのオーバーライドといいます。

サブクラスのコンストラクタからスーパークラスのコンストラクタを呼び出すには、super(引数)という形式で記述しますが、コンストラクタの始めの命令でなければなりません。
サブクラスのメソッドからすーパークラスのメソッドを呼び出す時は、super.メソッド名(引数)という形式で記述します。メソッド内のどこからでも呼び出せます。


問題:どこでコンパイルエラーが発生するか?
A. クラスAのコンストラクタ
B. クラスBのコンストラクタ
C. クラスAのメソッドx
D. クラスBのメソッドx


=== ソースコード
class A {
A() {
System.out.println("A");
}

void x() {
System.out.println("AX");
}
}

class B extends A {
public B() {
System.out.println("B");
super();
}

void x() {
System.out.println("BX");
super.x();
}
}
















正解:
B. クラスBのコンストラクタ
(super();はコンストラクタの最初の命令でなければなりません)

オーバーライド(4) :コンストラクタとの比較

スーパークラスで定義したメソッドをサブクラスで再定義することをメソッドのオーバーライドといいます。実行時はサブクラスで定義したメソッドのみが呼び出されます。

コンストラクタはsuper()の指定がない場合は引数のないスーパークラスのコンストラクタが呼ばれますが、通常のメソッドはサブクラスで定義したメソッドのみが呼び出される点が異なります。

問題:何が出力されるか?
A. A、B、BXの順
B. A、B、AX、BXの順
C. B、BXの順
D. B、AX、BXの順

public class M {
    public static void main(String[] args) {
        B b = new B();
        b.x();
    }
}

class B extends A {
    B() {
        System.out.println("B");
    }

    void x() {
        System.out.println("BX");
    }
}

class A {
    A() {
        System.out.println("A");
    }

    void x() {
        System.out.println("AX");
    }
}













解答:
A. A、B、BXの順

オーバーライド(3):superの使用

スーパークラスで定義したメソッドをサブクラスで再定義することをメソッドのオーバーライドといいます。実行時はサブクラスで定義したメソッドのみが呼び出されます。

ただし、サブクラスの定義内で、superキーワードを使用すると、スーパークラスで定義しているメソッドを内部的に呼び出すことが可能です。

問題 何が表示されるか?
A. AX
B. BX
C. AXBX
D. BXAX


===ソースコード
public class M {
    public static void main(String[] args) {
        B b = new B();
        b.x();
    }
}

class A {
    void x() {
        System.out.println("AX");
    }
}

class B extends A {
    void x() {
        System.out.println("BX");
        super.x();
    }
}














正解:
D. BXAX