超类中没有参数的超函数Java

超类中没有参数的超函数Java,java,class,inheritance,constructor,super,Java,Class,Inheritance,Constructor,Super,如果我有一个没有属性的超类Animal,然后是另一个带有一个属性的子类Dog,那么在为子类创建构造函数时使用super()方法是否有效?下面是示例代码: public class Animal { public Animal() { } } 有什么理由我应该或者不应该调用Dog类中的super()函数,这会有什么不同吗?谢谢 这里不需要调用super(),因为默认情况下,子类不会调用任何arg超类构造函数 只有在超类中有一个带参数的构造函数时,如果需要,您才需要从子类显式调用

如果我有一个没有属性的超类
Animal
,然后是另一个带有一个属性的子类
Dog
,那么在为子类创建构造函数时使用
super()
方法是否有效?下面是示例代码:

public class Animal {
    
    public Animal() { }
}

有什么理由我应该或者不应该调用
Dog
类中的
super()
函数,这会有什么不同吗?谢谢

这里不需要调用super(),因为默认情况下,子类不会调用任何arg超类构造函数

只有在超类中有一个带参数的构造函数时,如果需要,您才需要从子类显式调用它。

:

如果构造函数体不是以显式构造函数调用开始,并且所声明的构造函数不是原始类对象的一部分,那么构造函数体将以超类构造函数调用“
super();
”隐式开始,对其直接超类的构造函数的调用,不带任何参数

这意味着,如果您没有显式调用,或者确实有对
super()
的显式调用,则超类需要有一个无参数构造函数—显式声明的构造函数或默认构造函数(如果类没有其他构造函数,则编译器会自动添加一个无参数构造函数)


同样,如果代码使用显式的
super()
进行编译,这意味着该超类确实有一个无参数构造函数:因此,如果您省略
super()
,它也会进行编译并等效地工作,这可以为您提供答案。但是简单的回答是不,你不必。你只需要在超类中没有arg构造函数的情况下调用
super
。超类中可以有接受params的构造函数,但是如果也有一个no-arg构造函数也可以。
public class Dog extends Animal {
    
    public int age;
    public Dog(int age){
        super(); // Do I include this?
        this.age = age;
    }
}