【Java SE17 Silver 模擬試験】A-07

Java SE17 Silver 模擬試験
Java SE17 Silver 模擬試験

問題

次のコードをコンパイル、実行するとどうなりますか。

 public class Main {
     public static void main (String... args) {
         Parent p = new Child();
         p.method();
     }
 }

 class Parent {
     int  id;
     Parent (int id) {
         this.id = id;
     }
     void method() {
         System.out.println("Parent : : method");
     }
}

class Child extends Parent {
     protected void method() {
         System.out.println("Child : : method");
     }
}

選択肢

A)何も出力されない
B)Parent : : method が出力される
C)ClassCastException がスローされる
D)コンパイルエラーになる
E)Child : : method が出力される

解答

A)何も出力されない
B)Parent : : method が出力される
C)ClassCastException がスローされる
D)コンパイルエラーになる
E)Child : : method が出力される

解説

Parent p = new Child(); により、Childクラスのコンストラクタが呼び出されます。
ここでの注意点は、ParentクラスとChildクラスは継承関係にあります。そのため、サブクラスのChildクラスのコンストラクタが呼び出される前に、暗黙的にsuper()が付与されスーパークラスであるParentクラスのコンストラクタが呼び出されます。
しかし、スーパークラスのParentクラスのコンストラクタには引数なしのコンストラクタが未定義のためコンパイルエラーが発生します。
A)何も出力されない
→ 誤り。コンパイルエラーが発生するため、何も出力されることはありません。
B)Parent : : method が出力される
→ 誤り。コンパイルエラーが発生するため、このメッセージも出力されません。
C)ClassCastException がスローされる
→ 誤り。実行時には ClassCastException が発生しません。コンパイルエラーでプログラムが停止します。
D)コンパイルエラーになる
→ 正しい。Child クラスが Parent のコンストラクタを呼び出さないため、コンパイルエラーが発生します。
E)Child : : method が出力される
→ 誤り。コンパイルエラーが発生するため、このメッセージも出力されません。
したがって、正しい答えは D)コンパイルエラーになる で、他の選択肢はすべて誤りです。

前の問題へ SE17_A-06

次の問題へ SE17_A-08


対象資格:Java SE17 認定資格