コンストラクタ
メニューを表示するにはスワイプしてください
クラス初期化の簡素化方法
毎回各フィールドを初期化するのは手間がかかる場合があります。そのために、クラスにはコンストラクタがあります。コンストラクタの構文は以下の通りです:
Main.java
1234modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }
ここで記載されている各用語について説明します:
modifier: アクセス修飾子を指し、コンストラクタでは多くの場合publicが使われます。異なるアクセス修飾子を持つコンストラクタについては、別のコースで扱います。ClassName: このコンストラクタを作成するクラスの名前です。ParameterType: コンストラクタで使用されるパラメータの型です。ここは重要で、このパラメータはクラス内のフィールドと同じ型である必要があります。 例えば: クラスにString nameとint ageという2つのパラメータがある場合、コンストラクタも同じパラメータを持つ必要があります(すべてのフィールドをコンストラクタで初期化したい場合)。特定のクラスフィールドのみをコンストラクタで初期化したい場合、例えばnameのみの場合は、クラス内のフィールドと同じ型・名前のパラメータを1つだけ使用します。- 次に、コンストラクタ本体内で、パラメータで渡された値を使ってクラスフィールドに値を代入します。
"this" キーワード
this キーワードを使用することで、そのキーワードが記述されているクラスフィールドを参照可能。例えば、クラスに name と age という2つのフィールドがある場合、コンストラクタやメソッド内で this.name と記述すると、ローカル変数ではなくクラスフィールドを明示的に参照できる。この方法により、コンストラクタ内で this.name = name; のような構文でクラスフィールドを初期化可能。
例
すべてのフィールドを初期化するためのクラス内コンストラクタの例を以下に示す。
Person.java
1234567891011class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }
Person というクラスには3つのフィールドが存在し、それぞれのフィールドが this キーワードを用いてコンストラクタに追加されている。そのため、コンストラクタはパラメータから受け取った値でフィールドを初期化する。このコンストラクタを main メソッドで利用し、パラメータとして渡した値でフィールドが初期化されることを確認する。
Main.java
123456789101112131415161718192021package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }
コンストラクタを使用して Person オブジェクト bob を初期化し、name、age、gender をパラメータとして渡しました。その後、これらのパラメータを画面に出力し、オブジェクトのフィールド値がコンストラクタのパラメータで指定された通りであることを確認します。
コンストラクタのオーバーロード
コンストラクタはオーバーロードすることもでき、すべてのクラスフィールドの初期化をカバーしない場合もあります。例えば、Alice の gender を指定したくない場合、2つのパラメータのみを受け取るコンストラクタをオーバーロードし、それらでフィールドを初期化することができます。
Main.java
12345678910111213141516171819202122232425262728package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }
コンストラクタはメソッドと同様にオーバーロードでき、異なる数や型のパラメータを受け取ることが可能。
デフォルトコンストラクタ
デフォルトコンストラクタは、パラメータを受け取らず、フィールドを初期化しないコンストラクタ。クラスに他の種類のコンストラクタが存在しない場合、すべてのクラスにデフォルトで存在するため、デフォルトコンストラクタと呼ばれる。任意のクラスのオブジェクトを作成するたびに、コンストラクタが使用される。パラメータを受け取るコンストラクタがすでに存在する場合にデフォルトコンストラクタを利用したい場合は、空のコンストラクタも記述する必要がある。
Main.java
123456789101112131415161718192021222324252627282930313233package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }
3種類の異なるコンストラクタを使用して、それぞれのPersonオブジェクトを初期化している。最後の例でわかるように、Johnは名前も年齢も持たない。これは、これらのフィールドがオブジェクトに対して初期化されていないため。このように、必要なだけコンストラクタをオーバーロードし、それを通じてオブジェクトを作成できる。
1. 次のうち、コンストラクタに関する正しい記述はどれですか?
2. Javaにおけるコンストラクタの目的は何ですか?
3. 次のうち、パラメータ付きコンストラクタを正しく作成しているコードスニペットはどれですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください