Javaのコンストラクタのサンプルです。
目次
サンプル | コンストラクタとは |
デフォルトコンストラクタ | |
コンストラクタのオーバーロード | |
別のコンストラクタを実行する(this) | |
親クラスのコンストラクタを実行する(super) |
コンストラクタとは
アクセス修飾子 class クラス名 { アクセス修飾子 コンストラクタ名(引数の型 引数){ 処理 } } |
- コンストラクタは、クラスをインスタンス化する時に実行されます。
- 初期値を設定するときなどに使用されます。
- コンストラクタ名は、クラス名と同じにします。
- 戻り値はないので、戻り値の記述はしません。
- アクセス修飾子は、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;
class Color {
String name;
public Color(String name) {
this.name = name;
}
}
public class Test1 {
public static void main(String[] args) {
Color c1 = new Color("赤");
System.out.println(c1.name); // りんご
}
}
6~8行目がコンストラクタです。
コンストラクタ名は、3行目のクラス名(Color)と同じにします。
12行目は、Colorクラスをnew演算子でインスタンス化しています。
その際に6行目が呼ばれ、7行目で引数の値が4行目のメンバ変数にセットされます。
デフォルトコンストラクタ
- コンストラクタを記述しない場合、引数がなく、処理も何もしない空のコンストラクタが生成されていることになります。
- その空のコンストラクタのことをデフォルトコンストラクタまたは暗黙のコンストラクタと呼びます。
- コンストラクタを記述した場合は、デフォルトコンストラクタは生成されません。
デフォルトコンストラクタのサンプルです。
package test1;
class Color {
String name;
public Color() {
}
}
public class Test1 {
public static void main(String[] args) {
Color c1 = new Color();
System.out.println(c1.name); // null
}
}
6,7行目がデフォルトコンストラクタのイメージです。
引数がなく、処理もありません。
コンストラクタのオーバーロード
コンストラクタのオーバーロードとは、コンストラクタ名が同じで引数が異なるものです。
package test1;
class Color {
String name;
public Color() {
this.name = "赤";
}
public Color(String name) {
this.name = name;
}
}
public class Test1 {
public static void main(String[] args) {
Color c1 = new Color();
System.out.println(c1.name); // 赤
Color c2 = new Color("青");
System.out.println(c2.name); // 青
}
}
6,9行目がオーバーロードです。
6行目は、インスタンス化する時に引数がない場合に実行されます。
9行目は、インスタンス化する時にString型の引数が1つのときに実行されます。
別のコンストラクタを実行する(this)
別のコンストラクタを実行するサンプルです。thisを使用します。
package test1;
class Color {
String name;
public Color(String name) {
this.name = name;
}
public Color(int num) {
// System.out.println("test1");
this("赤");
}
}
public class Test1 {
public static void main(String[] args) {
Color c1 = new Color(1);
System.out.println(c1.name); // 赤
}
}
6,9行目は、オーバーロードです。コンストラクタ名が同じで引数が異なるものです。
11行目のthisは、6行目のコンストラクタを指します。String型の引数が1つで一致するので6行目のコンストラクタが実行されます。
別のコンストラクタを呼ぶthisは、コンストラクタ内で最初に記述します。
10行目のコメントを外すとthisが最初の記述にならないのでコンパイルエラーになります。
親クラスのコンストラクタを実行する(super)
親クラスのコンストラクタを実行するサンプルです。 superを使用します。
package test1;
class Color1 {
String name;
public Color1(String name) {
this.name = name;
}
}
class Color2 extends Color1 {
public Color2(String name) {
super(name);
}
}
public class Test1 {
public static void main(String[] args) {
Color2 c2 = new Color2("赤");
System.out.println(c2.name); // 赤
}
}
12行目のsuperは、親クラスの6行目のコンストラクタを実行します。
関連の記事