2010-05-11 46 views

回答

1

的清潔方式是到「檢索式」在任何時候明確。

相反,你讓goForIt()C類的方法,並有AB覆蓋它,不同的方式實現它,可能調用的過程中super.goForIt()

1

是,instanceof是不是很乾淨。聽起來像goForIt()應根據子類的某些屬性更改行爲。而不是將問題硬編碼爲「它是否是A?」,請提出問題「班上是否有一些關鍵屬性Foo?」 (據推測,A有)。然後,讓班級回答問題。

public class C { 
    public abstract boolean isFoo(); 
    public void goForIt(C c) { 
    if (isFoo()) { 
     ... 
    } 
    ... 
} 

public class A extends C { 
    public boolean isFoo() { 
    return true; 
    } 
    ... 
} 

public class B extends C { 
    public boolean isFoo() { 
    return false; 
    } 
    ... 
}