問題
以下の Student
クラスがあります。このクラスには複数のコンストラクタがあります。main
メソッドでこのクラスのオブジェクトを生成し、コンストラクタチェーンが正しく動作していることを確認してください。
public class Student {
private String name;
private int age;
private String major;
// デフォルトコンストラクタ
public Student() {
this.name = "Unknown";
this.age = 18;
this.major = "Undeclared";
}
// 引数を受け取るコンストラクタ1
public Student(String name) {
this(); // デフォルトコンストラクタを呼び出す
this.name = name;
}
// 引数を受け取るコンストラクタ2
public Student(String name, int age, String major) {
this(name); // 別の引数を受け取るコンストラクタを呼び出す
this.age = age;
this.major = major;
}
// ゲッターメソッド(省略)
}
コンストラクタチェーンとは
「コンストラクタチェーン」とは、同じクラス内で複数のコンストラクタがお互いに呼び出し合う仕組みを指します。これにより、異なる引数リストや初期化処理を持つコンストラクタを効果的に再利用できるようになります。コンストラクタチェーンは、オーバーロードされたコンストラクタが同じクラス内でお互いに呼び出されることで形成されます。
ヒント
public class Main {
public static void main(String[] args) {
// デフォルトコンストラクタが呼び出される
Person person1 = new Person();
System.out.println("Person1: Name = " + person1.getName() + ", Age = " + person1.getAge());
// 引数を指定してコンストラクタが呼び出される
Person person2 = new Person("John");
System.out.println("Person2: Name = " + person2.getName() + ", Age = " + person2.getAge());
// 別の引数を指定してコンストラクタが呼び出される
Person person3 = new Person("Alice", 25);
System.out.println("Person3: Name = " + person3.getName() + ", Age = " + person3.getAge());
}
}
class Person {
private String name;
private int age;
// デフォルトコンストラクタ
public Person() {
this("Unknown", 18); // 別のコンストラクタを呼び出す
}
// 引数を受け取るコンストラクタ1
public Person(String name) {
this(name, 18); // 別のコンストラクタを呼び出す
}
// 引数を受け取るコンストラクタ2
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// ゲッターメソッド(省略)
}
この例では、Person
クラスがデフォルトコンストラクタと2つの引数を受け取るコンストラクタを持ち、それぞれが別のコンストラクタを呼び出す形でコンストラクタチェーンが構成されています。main
メソッド内でオブジェクトを生成して、それぞれのオブジェクトの状態を出力しています。
→解答例