假設我有一個繼承鏈,每個類通過添加一個新字段來擴展它的超類,並且我希望該鏈的每個類都覆蓋toString()
方法,如下所示:強制繼承鏈的每一類重寫一個抽象方法
public String toString()
{
return super.toString() + "[newfield=" + newfield + "]";
}
如果我使用抽象基類,那麼當通過實現抽象方法使繼承鏈的類變爲具體時,從那一點開始,所有子類都通過繼承已經實現的方法變得具體。
是否有Java的辦法迫使每類重寫(重新實現),即使它已經在繼承鏈中實現更高的抽象方法?
你可以在編譯時使用註釋和自定義註釋處理器(如果你認爲APT是編譯時,時間)。 – 2012-04-24 13:12:01
@EliAcherkan真實,好點。但是我想你只能在所有重寫類都有註釋的情況下才能這樣做,對吧?或者,也許用'@ Inherited'標記的註釋可以完成這項工作? – 2012-04-24 13:18:52
好問題,我承認我沒有完全想到它。我希望用註解來標記最上面的類是足夠的,並且APT允許你a)找到給定類的後代列表;或b)在所有類上調用您的註釋處理器(以便您可以檢查當前類的祖先是否有特定的註釋)。 – 2012-04-24 13:27:19