Java:如果这是instanceof Something,显示一个只属于Something的变量?

时间:2014-02-13 03:24:03

标签: java inheritance instance-variables extends instanceof

这里的所有内容都经过重命名和简化。

我有一个父类(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类中基本上没有制作“可以添加的价格”变量?

1 个答案:

答案 0 :(得分:2)

您可以通过在子类中适当地覆盖displayInfo来实现此目的。这是一种更好的方法,因为父类不应该试图知道它的子节点是什么,因为子类的数量及其名称不在父类的控制之内。人们可以以意想不到/不可预测和不受控制的方式扩展父类。如果您定义displayInfo合同并强制执行子类以实现它,它将很有效。子类的数量无关紧要。只要根据合同实施displayInfo,OOP将负责其余的事项: - )