这不太对。只有当它是默认构造函数(即无参数构造函数)时,才会自动调用超类的构造函数。
如果你的超类没有默认构造函数,那么你必须显式调用你选择的构造函数super(args..)
。
例如,尽管BearManPig
' 构造函数的签名与 ' 不同,但这完全没问题Animal
:
public class Animal {
public Animal() {
}
}
public class BearManPig extends Animal {
public BearManPig(String string) {
}
}
那是因为有一个 Java 找到了默认的无参数构造函数。
现在,当没有默认构造函数时,您必须明确要调用哪个构造函数。例如,这不起作用:
// DOESN'T COMPILE
public class Animal {
public Animal(String string) {
}
public Animal(String string0, String string1) {
}
}
public class BearManPig extends Animal {
// There is no default constructor, stupid Java can't figure out what to do
public BearManPig(String string) {
}
}
但这确实:
// does compile
public class Animal {
public Animal(String string) {
}
public Animal(String string0, String string1) {
}
}
public class BearManPig extends Animal {
public BearManPig(String string) {
super(string); // I've told Java what to do
}
}