Java コンストラクタ
Java では、コンストラクタ(Constructor)はクラスのオブジェクトを作成するための特別なメソッドです。
new キーワードを使用してオブジェクトを作成すると、コンストラクタは自動的に呼び出され、オブジェクトの属性を初期化します。
コンストラクタには以下のような特徴があります:
クラス名と同じ:コンストラクタの名前はクラス名と完全に一致している必要があります。大文字と小文字も含みます。これはコンストラクタの基本的な要件です。
戻り値の型がない:コンストラクタには戻り値の型の宣言がありません。たとえ
voidvoid であっても書きません。これにより、通常のメソッドと区別されます。自動呼び出し:使用するたびに
newオブジェクトを作成する際、コンストラクタは自動的に呼び出され、オブジェクトの属性と状態を初期化します。直接呼び出せない:コンストラクタは
newnew キーワードを使用してオブジェクト作成時にのみ呼び出すことができ、通常のメソッドのように直接呼び出すことはできません。オーバーロードをサポート:パラメータリストが異なっていれば、1つのクラスに複数のコンストラクタを定義できます。オーバーロードにより、さまざまな初期化ニーズに合わせて異なるコンストラクタを作成できます。
デフォルトコンストラクタ:コンストラクタが1つも定義されていない場合、Java は引数なしのデフォルトコンストラクタを提供します。しかし、他のコンストラクタを1つでも定義すると、Java はデフォルトコンストラクタを提供しなくなります。
thisthis キーワードの使用:コンストラクタ内ではthisthis を使用して現在のオブジェクトの属性やメソッドを参照したり、別のコンストラクタを呼び出したりできます(コンストラクタの最初の行である必要があります)。これにより、コードの重複を避けられます。継承はできないが、呼び出しは可能:コンストラクタはサブクラスに継承されませんが、サブクラスは
super()super を使用して親クラスのコンストラクタを呼び出し、継承された属性を初期化できます。オブジェクト初期化の保証:コンストラクタの主な役割は、オブジェクトの属性と状態を初期化し、オブジェクトが作成時に適切な初期状態にあることを保証することです。
コンストラクタの役割:
- オブジェクトの属性を初期化する:コンストラクタの主な役割は、オブジェクトの属性に初期値を設定することです。
- オブジェクト初期化の完全性を保証する:コンストラクタ内でデフォルト値や必要なパラメータを設定できるため、オブジェクトが完全に初期化されていないという問題を回避できます。
コンストラクタの種類
Java のコンストラクタは次の2種類に分けられます:引数なしコンストラクタと引数ありコンストラクタ。
1、引数なしコンストラクタ(デフォルトコンストラクタ)
クラス内でコンストラクタが1つも定義されていない場合、Java はデフォルトで引数なしコンストラクタを提供します。例:
例
public Person() {
System.out.println("Personオブジェクトが作成されました");
}
}
- コンストラクタを明示的に定義していない場合、Java は自動的にデフォルトの引数なしコンストラクタを提供します。
- 他のコンストラクタを定義すると、Java はデフォルトコンストラクタを提供しなくなります。
2、引数ありコンストラクタ
パラメータ付きのコンストラクタを定義して、オブジェクト作成時に属性に値を代入できます:
例
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
引数ありコンストラクタを呼び出すとき、オブジェクトの属性を初期化できます:
Person p = new Person("Alice", 25);コンストラクタのオーバーロード
Java はコンストラクタのオーバーロードをサポートしています。つまり、パラメータリストが異なっていれば、同じクラス内に複数のコンストラクタを定義できます。例:
例
String name;
int age;
public Person() {
this.name = "Unknown";
this.age = 0;
}
public Person(String name) {
this.name = name;
this.age = 0;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
オブジェクトを作成するとき、Java は渡されたパラメータの数と型に基づいて、一致するコンストラクタを自動的に選択します:
Person p1 = new Person(); // 调用无参构造方法
Person p2 = new Person("Alice"); // 调用单参数构造方法
Person p3 = new Person("Bob", 30); // 调用双参数构造方法コンストラクタ内の this キーワード
コンストラクタ内で、this キーワードは通常次の2つの場合に使用されます:
1、現在のオブジェクトの属性またはメソッドを参照する:コンストラクタのパラメータ名がクラスの属性名と同じ場合、this を使用してクラスの属性とパラメータを区別します。例:
例
this.name = name; // this.name はクラスの属性を表す
this.age = age;
}
2、別のコンストラクタを呼び出す:this() を使用して現在のクラスの他のコンストラクタを呼び出すことができます。これはコードの重複を避けるためによく使用されますが、コンストラクタの最初の行に置く必要があります。
例
this(name, 0); // 別の2つのパラメータを持つコンストラクタを呼び出す
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
コンストラクタは Java のオブジェクト指向プログラミングにおいて非常に重要な部分であり、コンストラクタを使用することでオブジェクトの初期化プロセスを効果的に制御し、作成されたオブジェクトの状態の完全性と一貫性を保証できます。
その他の拡張