Java:如果这是某个对象的实例,是否显示一个只属于某个对象的变量?
这里的一切都被重新命名和简化 我有一个父类(normalThing)和一个方法,该方法显示有关实例的一些数据,还有一个类(specialThing)扩展父类以包含另一个实例变量(addedPrice) 我希望我的display方法说明该实例是否为specialThing,如果是,则显示addedPrice。但是因为addedPrice只属于特殊功能,我不知道如何编写它Java:如果这是某个对象的实例,是否显示一个只属于某个对象的变量?,java,inheritance,instance-variables,extends,instanceof,Java,Inheritance,Instance Variables,Extends,Instanceof,这里的一切都被重新命名和简化 我有一个父类(normalThing)和一个方法,该方法显示有关实例的一些数据,还有一个类(specialThing)扩展父类以包含另一个实例变量(addedPrice) 我希望我的display方法说明该实例是否为specialThing,如果是,则显示addedPrice。但是因为addedPrice只属于特殊功能,我不知道如何编写它 void displayInfo(){ StringBuilder d = new StringBuilder("Am
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类中创建一个“canbeaddedPrice”变量?您可以通过在子类中适当地重写
displayInfo
来实现这一点。这是一种更好的方法,因为父类不应该试图知道它的子类是什么,因为子类的数量和它们的名称不在父类的控制之下。人们可以以意外/不可预测和不受控制的方式扩展父类。如果您定义displayInfo
contract并强制子类来实现它,那么它将很好地工作。子类的数量并不重要。只要displayInfo
是按照合同实现的,OOP就会处理剩下的:-)不要让父类依赖于子类。永远不会。@SotiriosDelimanolis,除非它是通过我信任的抽象(或重写)方法实现的@ElliottFrisch所说的依赖性,我的意思是在父级源代码中专门使用子类型。使用abstract
方法,您不会这样做,所以这很好。