如何解决超类中没有参数的超级函数Java
如果我有一个没有属性的超类 Animal
,然后是另一个有一个属性的子类 Dog
,那么在为子类创建构造函数时使用 super()
方法是否有效?示例代码如下:
public class Animal {
public Animal() { }
}
public class Dog extends Animal {
public int age;
public Dog(int age){
super(); // Do I include this?
this.age = age;
}
}
是否有任何理由让我应该或不应该在 super()
类中调用 Dog
函数,这有什么不同吗?谢谢!
解决方法
您不需要在此处调用 super(),因为默认情况下子类会调用无参数超类构造函数。
仅当超类中存在带有某个参数的构造函数时,如果需要,您需要从子类中显式调用它。
,如果构造函数体不以显式构造函数调用开头,并且声明的构造函数不是原始类 Object 的一部分,则构造函数体以超类构造函数调用“super();
”隐式开头,一个调用不带参数的直接超类的构造函数。
这意味着,如果您没有显式调用或确实有对 super()
的显式调用,则超类需要有一个无参数构造函数——要么是显式声明的,要么是默认构造函数(如果类没有其他构造函数,则编译器会自动添加一个无参数构造函数)。
因此,如果代码使用显式 super()
进行编译,则表示超类确实具有无参数构造函数:因此,如果您省略 super()
,它也将编译并等效地工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。