为什么在子类构造函数中调用'super()'?

时间:2016-03-30 19:35:44

标签: java

为什么我需要在这里拨打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.");
    }
}

2 个答案:

答案 0 :(得分:1)

如果父构造函数没有参数,没有任何理由。否则,您需要显式调用super(...),您可以在其中设置这些参数。

答案 1 :(得分:1)

默认情况下,每个类都有默认构造函数,即非参数化的构造函数,一旦你在其上定义了任何构造函数,那么默认的行为将不起作用。

另一件事是,如果任何类扩展任何其他类,那么默认情况下,子类的每个构造函数都会调用其parrent的默认构造函数,即内部的super()但是一旦你将参数化的构造函数声明为父类,那么你需要从子类构造函数中明确地调用它,即super(参数...)