2011-12-14 97 views
0

我最近不得不將一個簡單的類分成兩個版本,舊版客戶端的舊版本以及已遷移到單獨界面的新版本。可以重載接口的實現嗎?

由於有很多常見的代碼,我將它拆分爲2個具體類的抽象類。隨着結構如下:

interface ParentInt { 
    // Common methods 
} 

interface ChildIntA extends ParentInt { 
    // Legacy methods 
} 

interface ChildIntB extends ParentInt { 
    // New model methods 
} 

abstract class AbstParentClass implements ParentInt { 
    // ... 
} 

class LegacyConcreteClass extends AbstParentClass implements ChildIntA { 
    // ... 
} 

class NewConcreteClass extends AbstParentClass implements ChildIntB { 
    // ... 
} 

什麼我不知道是是否有我可能會遇到因爲AbstParentClass實現ParentInt和兩個具體的類也實現此接口的孩子有什麼缺陷?這種情況可能會有更好的模式嗎?

無論AbstParentClass是否實現了這個指令,我的代碼目前都能正常工作。事實上,因爲兩個具體類在不同的線程中分別實例化,所以AbstParentClass從來不會直接在其他任何地方引用。

在我的情況下,接口是API的一部分,因此不能從我的POV更改。

+0

即使它們相互擴展,您也應該能夠從儘可能多的接口繼承。你不能從多於一個類繼承(但你不這樣做,所以你應該沒問題:)) – span 2011-12-14 13:59:37

+1

每個人都在評論有關缺少的「擴展AbstParentClass」的子類聲明;我相信這只是一個疏忽,因爲這顯然不是真正的代碼。我已經添加了這些聲明,以便我們可以討論真實情況。 – 2011-12-14 14:05:29

回答

1

這種方法沒有問題。我理解你對這種明顯的「多重繼承」的擔憂,但Java處理接口的方式確保這種事情永遠不會成爲問題。具有相同簽名的接口方法是「融合」的,只有一種實現方法是允許或需要的,無論有多少相同的接口方法被繼承。

2

有沒有技術的問題。在你的應用程序中是否有意義是一個單獨的問題,但我們不知道答案是否足夠。

另一件可能會或可能不會成爲問題的事情是新界面特別與傳統界面相關聯。如果傳統界面消失,您需要解開這兩個界面,或者保留這個界面。

通過讓新類實現兩個接口,可能會更容易將它們分開。擴展抽象基類是否有意義變得有點模糊。

相關問題