鑑於基類被定義爲,強制基於存取方法嚴格繼承
abstract Base{
protected int field;
protected int getter(){
return this.field;
}
...
}
隨着進行分類的子類型,該吸氣劑的基礎上的意圖,我創建的接口等,
interface MyFieldGettable{
public int getter();
}
,我很高興創造一個子類型,比如,
class CantGetField extends Base{
....
}
而且,因爲基本版本已經打印ŧ他現場,讓我們補子類型一樣,
class CanGetField extends Base implements MyFieldGettable {
public int getter(){
return this.getter();
}
}
現在,在一段代碼某處有一個List<Base>
,我想隔離兩種類型,並檢查CanGetField
類型的字段。因此,我寫,
for(Base b:listOfBase){
if(b instanceof CanGetField){
int field = ((CanGetField)b).getter();
而且,如果你有任何人會現在已經猜到了。這吹到StackOverflowError
。現在,我可以通過糾正CanGetField
類作爲定義解決這個問題,
class CanGetField extends Base implements MyFieldGettable {
public int getter(){
return this.field;
}
}
或者,我可以在界面更改getter方法的名稱,並委託子類型的基礎方法的所有調用。但是,這會在子類型中導致大量冗餘代碼。
有沒有其他的解決方案。
'return super.getter()',大概? –
@OliverCharlesworth你在我前面49秒( –
)難道我看起來很愚蠢嗎?是在想這個地獄和天堂嗎? – soufrk