Javaにおける初期化処理(コンストラクタ)では、this()やsuper()は1行目にしか記述できない。というルールがあります。
そのため、コンストラクタの2行目にthis()やsuper()を書いてしまうと以下のように2行目でコンパイルエラーが発生し、怒られてしまいます。
super()が2行目だとNG
//コンストラクタ
public Child(int x, int y, int z) {
this(x,y);
super(z);//ここでコンパイルエラー。
}
this()が2行目だとNG
//コンストラクタ
public Child(int x, int y, int z) {
super(z);
this(x,y);//ここでコンパイルエラー。
}
本稿では、これを解決するサンプルコードを紹介します。
変数x,yは自クラスのコンストラクタで初期化処理を行い、変数zを親クラスのコンストラクタで初期化処理を行うにはどうしたら良いですか?
この質問を解決するサンプルコードを作成します。
まず、スーパークラスを次のように作成します。
Parent.java
public class Parent {
int z;
public Parent(){
this.z = 100;
}
public Parent(int z) {
this.z = z;
}
}
続いて、サブクラスを次のように作成します。
Child.java
public class Child extends Parent {
//フィールド
int x;
int y;
//コンストラクタ
public Child(int x, int y, int z) {
this(z);
this.x = x;
this.y = y;
}
//コンストラクタ
public Child(int z) {
super(z);
}
//メイン処理
public static void main(String[] args) {
//インスタンス化
Child c = new Child(10,20,30);
//出力
System.out.println(c.x + ":" + c.y + ":" + c.z);
}
}
これを実行すると次の結果になります。
実行結果
10:20:30
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!