DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on • Edited on

7章21

答え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"で呼び出します。
    }
}
Enter fullscreen mode Exit fullscreen mode

実行フロー:

  1. Mainクラスのmainメソッドが実行され、new Child("D");Childクラスのインスタンスが生成されます。ここで文字列"D"を引数に取るChildのコンストラクタが呼ばれます。
  2. Childのコンストラクタはまずthis();を使って、同じクラスのデフォルトコンストラクタChild()を呼び出します。
  3. Child()コンストラクタは、super("B");を使ってParentクラスの文字列"B"を引数に取るコンストラクタを呼び出します。
  4. Parent(String val)コンストラクタは最初にthis();で自クラスのデフォルトコンストラクタを呼び出し、"A"を出力します。
  5. その後、"B"が出力されます。
  6. Child()コンストラクタに戻り、"C"が出力されます。
  7. 最後にChild(String val)コンストラクタに制御が戻り、引数"D"が出力されます。

出力結果:

A
B
C
D
Enter fullscreen mode Exit fullscreen mode

Top comments (0)