为什么我需要在这里拨打super
?
class Animal {
public Animal(String arg) {
System.out.println("Constructing an animal: " + arg);
}
}
class Dog extends Animal {
public Dog() {
super("From Dog constructor");
System.out.println("Constructing a dog.");
}
}
答案 0 :(得分:1)
如果父构造函数没有参数,没有任何理由。否则,您需要显式调用super(...),您可以在其中设置这些参数。
答案 1 :(得分:1)
默认情况下,每个类都有默认构造函数,即非参数化的构造函数,一旦你在其上定义了任何构造函数,那么默认的行为将不起作用。
另一件事是,如果任何类扩展任何其他类,那么默认情况下,子类的每个构造函数都会调用其parrent的默认构造函数,即内部的super()但是一旦你将参数化的构造函数声明为父类,那么你需要从子类构造函数中明确地调用它,即super(参数...)