我正在寫一個抽象類,我有一個應該由子類定義的變量(在這種情況下,它是一個在超類中使用的int)。我無法決定是否使用默認值來定義protected
變量,並讓子類在構造函數中或通過setter
方法更改該值。或者在父類中定義一個抽象方法,以便所有子類必須實現它並返回它們想要使用的值(然後使用抽象方法訪問超級類中的方法)。任何人都可以告訴我,爲什麼一種方式比另一種更受歡迎?對於應該由子類指定的數據,我應該使用抽象方法還是實例變量?
抽象方法:
public abstract int getValue();
public int getValue() {
return 5;
}
- 優點:
軍隊子類來思考這個值,並選擇他們希望它是什麼。
- 缺點:
沒有缺省值,所以即使多數子類只是想用相同的值仍然要實現該方法。 (該方法可以由非抽象並返回默認值,但你失去迫使子類來思考價值的優勢)
受保護的變量:
protected int value;
public SubClassImpl() {
value = 5;
}
- 優點:
可以定義一個默認值,子類可以忽略它,如果他們不在乎。
- 缺點:子類的
作者沒有意識到的變量的存在,所以他們可能會被默認的行爲感到驚訝。
值是不可變的嗎?如果不是,誰負責改變價值? – 2011-02-01 14:53:55
沒有要求該值是不可變的,但我不希望它在創建對象後被更改。 – DaveJohnston 2011-02-01 15:10:45