我的Java代码看起来像这样:
public class Animal {
Animal(String name) {
// some code
}
}
这样的子类:
public class Dog extends Animal {
Dog(String name) {
// SAME code as Animal constructor
}
}
Dog和the Animal之间的唯一区别是Dog有一些覆盖超类的方法。他们的构造函数具有完全相同的代码。我怎样才能避免这个重复的代码?我知道对象不能继承构造函数。
答案 0 :(得分:6)
如果构造函数相同,则Dog
中不需要它。您可以通过调用Animal
从Dog
访问super(name);
构造函数。
public class Animal {
Animal(String name) {
// some code
}
}
在Dog:
public class Dog {
Dog(String name) {
super(name);
}
}
值得注意的是,对超类构造函数的调用必须是构造函数中的第一行。但是在你打电话给super(name)
后,你可以继续做其他特定于狗的代码。
例如:
public class Dog {
Dog(String name) {
// You can't put any code here
super(name);
// But you can put other code here
}
}
答案 1 :(得分:3)
您可以委托超级构造函数:
Dog(String name) {
super(name);
}
另请参阅:http://docs.oracle.com/javase/tutorial/java/IandI/super.html。