Java 为什么打电话';超级()和#x27;在子类构造函数中?

Java 为什么打电话';超级()和#x27;在子类构造函数中?,java,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("Co

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

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

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


另一件事是,如果任何类扩展了任何其他类,那么默认情况下,子类的每个构造函数都会在内部调用各自的默认构造函数,即super(),但一旦您向父类声明参数化构造函数,则需要从子类构造函数显式调用它,即super(参数…)

因为如果提供构造函数,编译器不会插入默认构造函数。因此,
Animal
没有空构造函数。