这里的所有内容都经过重命名和简化。
我有一个父类(normalThing),其中一个方法显示有关实例的一些数据,另一个类(specialThing)扩展父类以包含另一个实例变量(addedPrice)。
我希望我的显示方法说明实例是否为specialThing,如果是,则显示addedPrice。但是因为addedPrice只属于specialThing,我无法弄清楚如何编码它!
void displayInfo(){
StringBuilder d = new StringBuilder("Am I special? ");
if(this instanceof specialThing){
d.append("Yes, so I cost an extra " + this.addedPrice);
//No, I didn't expect that to work, but I had hope
}
else d.append("Nope.");
JOptionPane.showMessageDialog(null, d);
}
有没有办法在normalThing类中基本上没有制作“可以添加的价格”变量?
答案 0 :(得分:2)
您可以通过在子类中适当地覆盖displayInfo
来实现此目的。这是一种更好的方法,因为父类不应该试图知道它的子节点是什么,因为子类的数量及其名称不在父类的控制之内。人们可以以意想不到/不可预测和不受控制的方式扩展父类。如果您定义displayInfo
合同并强制执行子类以实现它,它将很有效。子类的数量无关紧要。只要根据合同实施displayInfo
,OOP将负责其余的事项: - )