2014-02-13 51 views
0

這裏的一切都被重新命名和簡化。Java:如果這是instanceof Something,顯示一個只屬於Something的變量?

我有一個父類(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類本質上作出「可能待addedPrice」變量?

+3

不要讓您的父類依賴於子類。 **從來沒有。** –

+0

@SotiriosDelimanolis **除了**,當它通過我信任的抽象(或重載)方法! –

+0

@ElliottFrisch依賴關係我的意思是特別在父代的源代碼中使用子類型。用'抽象'方法你不這樣做,所以沒關係。 –

回答

2

您可以通過在子類中適當覆蓋displayInfo來實現此目的。這是一種更好的方法,因爲父類不應該試圖知道它的子類是什麼,因爲子類的名稱和它們的名字不在父類的控制之下。人們可以以意外/不可預測和不受控制的方式擴展父類。如果您定義合同並強制子類實施它,它將會很好地工作。子類的數量無關緊要。只要displayInfo按照合同執行,OOP將負責處理其餘部分:-)

相關問題