那不是如果它是默认构造函数(即无参数构造函数),那么超类的构造函数只会自动调用。
如果您的超类s没有默认的构造函数,那么你必须用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
}
}
哪本教科书? – UmNyobe
现在,我在21天内坚持使用Sams Teach Yourself Java 2。稍后将赶上java的新功能。但这是他们在说什么? –
嗯,你是正确的混淆,因为它是不正确的... – UmNyobe