答えA
// Parentクラスを定義します。
class Parent {
// Parentクラスのデフォルトコンストラクタです。ここで"A"を出力します。
public Parent() {
System.out.println("A");
}
// ParentクラスのStringを引数に取るコンストラクタです。まず自身のデフォルトコンストラクタを呼び出し、
// その後引数で与えられた文字列を出力します。
public Parent(String val) {
this(); // ここでデフォルトコンストラクタを呼び出します。
System.out.println(val); // 引数で与えられた値("B"または"D")を出力します。
}
}
// Parentクラスから継承されたChildクラスを定義します。
class Child extends Parent {
// Childクラスのデフォルトコンストラクタです。ParentクラスのStringを引数に取るコンストラクタを
// "B"で呼び出した後に"C"を出力します。
public Child() {
super("B"); // ParentクラスのString引数コンストラクタを"B"で呼び出します。
System.out.println("C"); // "C"を出力します。
}
// ChildクラスのStringを引数に取るコンストラクタです。まずデフォルトコンストラクタを呼び出し、
// その後引数で与えられた文字列を出力します。
public Child(String val) {
this(); // ここでChildクラスのデフォルトコンストラクタを呼び出します。
System.out.println(val); // 引数で与えられた値("D")を出力します。
}
}
// メインクラスです。ここからプログラムが開始します。
public class Main {
public static void main(String[] args) {
new Child("D"); // ChildクラスのStringを引数に取るコンストラクタを"D"で呼び出します。
}
}
実行フロー:
-
Mainクラスのmainメソッドが実行され、new Child("D");でChildクラスのインスタンスが生成されます。ここで文字列"D"を引数に取るChildのコンストラクタが呼ばれます。 -
Childのコンストラクタはまずthis();を使って、同じクラスのデフォルトコンストラクタChild()を呼び出します。 -
Child()コンストラクタは、super("B");を使ってParentクラスの文字列"B"を引数に取るコンストラクタを呼び出します。 -
Parent(String val)コンストラクタは最初にthis();で自クラスのデフォルトコンストラクタを呼び出し、"A"を出力します。 - その後、"B"が出力されます。
-
Child()コンストラクタに戻り、"C"が出力されます。 - 最後に
Child(String val)コンストラクタに制御が戻り、引数"D"が出力されます。
出力結果:
A
B
C
D
Top comments (0)