class Animal{
String s;
Animal(String s){
this.s = s;
}
}
class Dog extends Animal{
Animal animal;
Dog(String s) {
super(s);
}
//here is an error "Implicit super constructor Animal() is undefined.Must explicitly invoke another constructor"
Dog(Animal animal){
this.animal = animal;
}
}
我的困惑是,我已经在
中调用了超类的构造函数with-parametersDog(String s) {
super(s);
}
但为什么我仍然在另一个构造函数Dog(Animal animal)中收到错误消息?
构造函数机制在此示例中的工作原理是什么?
谢谢!
答案 0 :(得分:5)
你问题的答案很简单:是的。
任何子类构造函数必须首先调用super。如果超类只有一个ctor采用一些参数,那么子类中的那些“超级调用”必须使用该ctor。
答案 1 :(得分:4)
您的代码不正确。当Dog
延伸Animal
时,Dog
不需要(也不应该)Animal
对象
正确的方法是
class Animal{
String s;
Animal(String s){
this.s = s;
}
// add a setter and getter
public String getS () {return s;}
public void setS (String s) {this.s = s;}
}
class Dog extends Animal{
Dog(String s) {
super(s);
}
}