K M*_*Man 6 java parameters inheritance constructor default-constructor
我无法编译此代码。
class Horse {
private int age;
Horse(int age) {
this.age = age;
}
}
class Pony extends Horse {
private int age;
Pony(int age) { //here compiler complains about no default constructor in parent class
this.age = age;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道当父类只有带有参数的构造函数时,您必须为子类定义一个构造函数,这就是我所做的。但是,编译器抱怨父类没有默认构造函数。
我是否可以得出结论,父类始终需要默认构造函数或无参数构造函数?如果我希望父类和子类仅具有带参数的构造函数怎么办?
我得出的结论是否正确:父类总是需要默认或无参数构造函数?
不。子类构造函数必须做的第一件事是调用超类构造函数之一。如果不这样做,编译器会为您调用超类的无参数构造函数。但如果超类没有的话,当然会失败。
你的代码应该是:
class Pony extends Horse {
Pony(int age) {
super(age);
}
}
Run Code Online (Sandbox Code Playgroud)
看,超类已经有一个年龄字段,并且可能有使用该字段的方法。因此,在子类中重新声明一个是错误的并且会适得其反。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |