Javaのコンストラクタのサンプルです。
目次
コンストラクタ
| アクセス修飾子 class クラス名 { アクセス修飾子 コンストラクタ名(引数の型 引数){ 処理 } } |
- コンストラクタは、new演算子でクラスをインスタンス化する時に実行されます。
- 初期値を設定するときなどに使用されます。
- コンストラクタ名は、クラス名と同じにします。
- 戻り値はないので、戻り値の記述はしません。
- アクセス修飾子は、public,protected,なし,privateを指定できます。
- コンストラクタをオーバーロードすることもできます。
- 以下は、Oracleの8.8. Constructor Declarationsのリンクです。
https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8
コード
コンストラクタのサンプルです。
package test1;
public class Product {
private String name;
public Product(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
6~8行目がコンストラクタです。
コンストラクタ名は、3行目のクラス名(Product)と同じにします。
3行目のクラスがnew演算子でインスタンス化されると、6行目が呼ばれ、7行目で引数の値が4行目のメンバ変数にセットされます。
コンストラクタの動きを確認する
上記のコンストラクタがあるクラスを呼び出すサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
Product p1 = new Product("りんご");
System.out.println(p1.getName());//りんご
}
}
6行目は、new演算子でインスタンス化しています。その時に引数の値が渡されます。
8行目は、セットされた値を確認しています。
デフォルトコンストラクタ
- コンストラクタを記述しない場合、引数がなく、処理も何もしない空のコンストラクタが生成されていることになります。
- その空のコンストラクタのことをデフォルトコンストラクタまたは暗黙のコンストラクタと呼びます。
- コンストラクタを記述した場合は、デフォルトコンストラクタは生成されません。
コード
デフォルトコンストラクタのサンプルです。
package test1;
public class Product {
private String name;
Product() {
}
public String getName() {
return name;
}
}
6,7行目がデフォルトコンストラクタのイメージです。
引数がなく、処理もありません。
コンストラクタのオーバーロード
コンストラクタのオーバーロードのサンプルです。
package test1;
public class Product {
private String name;
public Product() {
this.name = "みかん";
}
public Product(String name) {
this.name = name;
}
public Product(int num) {
this.name = "りんご";
}
}
6,10,14行目がオーバーロードです。コンストラクタ名が同じで引数が異なるものです。
6行目は、インスタンス化する時に引数がない場合に実行されます。
10行目は、インスタンス化する時にString型の引数が1つのときに実行されます。
14行目は、インスタンス化する時にint型の引数が1つのときに実行されます。
以下は、Oracleの8.8.8. Constructor Overloadingのリンクです。
https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8.8
コンストラクタを指定するthisを使用する
コンストラクタを指定するthisを使用するサンプルです。
package test1;
public class Product {
private String name;
public Product(String name) {
this.name = name;
}
public Product(int num) {
//System.out.println("test1");
this("ばなな");
}
}
6,10行目は、オーバーロードです。コンストラクタ名が同じで引数が異なるものです。
12行目のthisは、6行目のコンストラクタを指します。String型の引数が1つで一致するので6行目のコンストラクタが実行されます。
別のコンストラクタを呼ぶthisは、コンストラクタ内で最初に記述します。
11行目のコメントを外すとthisが最初の記述にならないのでコンパイルエラーになります。
親クラスのコンストラクタを使用する(super)
superは、親クラスのコンストラクタを使用する時に使います。
コード
superを使用するサンプルです。
1.以下は、親のクラスになります。
package test1;
public class Product1 {
private String name;
public Product1(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
2.以下は、上記の親クラスに対する子のクラスです。上記クラスを継承します。
package test1;
public class Product2 extends Product1 {
public Product2(String name) {
super(name);
}
}
6行目のsuperは、親クラス(Product1クラス)の6行目のコンストラクタを実行します。
3.コンストラクタを実行するクラスです。
package test1;
public class Test1 {
public static void main(String[] args) {
Product2 p2 = new Product2("りんご");
System.out.println(p2.getName());//りんご
}
}
6行目は、子クラスにString型の引数を1つ渡しています。
8行目は、親クラスのコンストラクタが実行されて値がセットされていることを確認しています。
関連の記事
Java クラスのサンプル
Java クラスの変数の用語のサンプルとまとめ(メンバー変数他)
Java 参照型の変数を型変換するサンプル
Java インスタンスの型を調べるサンプル(instanceof)
Java クラスのthisのサンプル
Java オーバーロードのサンプル