我正在学习java中的oop,并尝试决定是否可以/应该在本例中使用继承。不要注意访问修饰符之类的东西。
有两种宠物:
狗(名称、品种、年龄、主人)
猫(名称、品种、颜色、主人)
dog.tostring()应该返回 "Name: name, Breed: breed, Age: age, Owner: owner"
cat.tostring()应返回 "Name: name, Breed: breed, Color: color, Owner: owner"
我的问题是:我应该在抽象类中实现tostring(),在派生类中重写吗?怎样?我是说,只有一个领域。我看不出有什么好处。
所以,我做到了:
abstract class Pet {
String name;
String breed;
String owner;
// getters setters
public String toString() {
return ????
}
}
class Dog extends Pet {
int age;
public String toString() {
return String.format("Name: %s, Breed: %s, Age: %d, Owner: %s", name, breed, age, owner)
}
}
class Cat extends Pet {
String color;
public String toString() {
return String.format("Name: %s, Breed: %s, Color: %s, Owner: %s", name, breed, color, owner)
}
}
2条答案
按热度按时间yeotifhr1#
在这种情况下,您可以考虑应用模板方法设计模式。在这个模式中,您在抽象类中定义方法的可重用部分,并且只实现子类中的变量部分。例如:
在您的子类中:
qcuzuvrc2#
我不会在抽象类中编写tostring()。它在重用代码方面增加的很少,并且使语句更难阅读。将super.tostring()放在语句中间会让人困惑。