2011-05-17 83 views
1

我已經在這個題目念起來好像我最好的選擇是讓我想延伸到一個接口的類的..擴展/ 2類繼承Java中

的事情是, ParentA是Android API中的一個類,所以我實際上不能修改它(我只有構建版),而ParentB是由朋友創建的,ParentB已經實現了Runnable(並且AFAIK不能有一個實現另一個接口的接口界面..我無論如何得到錯誤)。

+1

你可以進入更多的細節?這聽起來像設計模式的問題。 – 2011-05-17 16:54:30

回答

3

你不能有一個實現另一個接口,由於接口都沒有關係實現的接口。但是,您可以有一個擴展另一個接口的接口。你也可以有一個實現兩個不同接口的類。

當你有兩個潛在的父類供你的子類使用時,他們不會相互子類化,你需要問自己的是你的類是ParentA還是isa ParentB。哪一個更合適?一旦你決定,你把另一個變成哈撒。

因此,假設您決定您的班級是ParentA。你的代碼可能看起來是這樣的:

public class MyClass extends ParentA { 

    private final ParentB runnable; 
    private final Thread runningThread; 

    public MyClass(ParentB runnable) { 
     this.runnable = runnable; 
     this.runningThread = new Thread(this.runnable); 
    } 

    public void start() { 
     this.runningThread.start(); 
    } 

    public void interrupt() { 
     this.runningThread.interrupt(); 
    } 

    public boolean isAlive() { 
     return this.runningThread.isAlive(); 
    } 
} 

在這裏,我委託線程的方法,而不是ParentB方法,因爲這是你很可能希望在一個Runnable控制。如果ParentB有你想要公開的自己的行爲,那麼你也需要這些委託方法。

+0

我以另一種方式解決了這個問題,不記得在這一點上,因爲它很久以前。我已將您的答案標記爲接受供其他用戶參考,他們偶然發現此線程。 – 2011-10-06 22:41:02

2

在Java中,您可以擴展接口。

但對於您的情況,我會建議使用聚合模式或委託模式。

看看在Java設計模式:http://en.wikipedia.org/wiki/Delegation_(programming)

+0

該頁面已被刪除從維基百科 – 2011-10-06 22:37:30

+0

修復了鏈接:) – 2011-10-07 18:39:25

+0

仍然被我打破..但我編輯它,現在作品:) – 2011-10-10 13:16:16