#1. 発生条件
例えば以下のようにクラスAを定義し、Aの子クラスとしてBを定義する。
.java
class A {
}
class B extends A{
public B(int b) {
}
}
このままではエラーは発生しないが、以下のようにクラスAのコンストラクタを明示的に定義したとき、
.java
class A {
public A(int a) {
}
}
class B extends A{
public B(int b) {
}
}
.java
Implicit super constructor A() is undefined. Must explicitly invoke another constructor
というようなエラーが発生する。
これは、クラスBのコンストラクタが親クラスAのデフォルトコンストラクタであるpublic A()
を参照しようとしているが、定義されていないためである。
#2. 回避方法
回避方法としては2通りある。
##2-1. デフォルトコンストラクタを明示的に定義
以下のように、public A()
を明示的に定義すればエラーを回避できる。
.java
class A {
public A() {
}
public A(int a) {
}
}
##2-2. super()
を明示的に呼び出す
以下のように、Aで定義してあるコンストラクタの引数に合わせたsuper()
を呼び出せばエラーを回避できる。
.java
class A {
public A(int a) {
}
}
class B extends A{
public B(int b) {
super(b);
}
}