2012-06-06 73 views
0

我理解多重繼承和接口的程度。是否有可能使用多繼承來實現我的要求?瞭解多重繼承和接口

我有分別實現InterA,InterB,InterC,InterD接口的類A,B,C,D。我想要一個ABCD類,它應該具有A,B,C,D的所有方法。然後,我希望InterA,InterB,InterC,InterD中聲明的方法在類ABCD中可用。

我的類A,B,C,d,我不想在類ABCD再次定義已經定義在INTERA,InterB,InterC,InterD方法的實現。我怎樣才能在Java中做到這一點?

+1

**爲什麼**你想要'ABCD'?系統中的每個對象(儘可能最廣泛的意義上)應該有一個單一的責任。讓一個班級做別人做的事違反了這個......很多! –

+0

您只能擴展一個類並在Java中實現多個接口。 – user845279

+0

Ofcourse約阿希姆,假設A,B,C,D是getter/setter。我需要一個擁有所有getter/setter的類,所以我正在設計ABCD類,現在要求我用ABCD重寫這裏的代碼。我相信我現在很清楚 – Manoj

回答

1

既然有在Java中沒有多重繼承,你不得不求助於聚集

class ABCD implements InterA, InterB, InterC, InterD 
{ 
    A implA; 
    B implB; 
    C implC; 
    D implD; 

    ABCD(A pimplA, B pimplB, C pimplC, D pimplD) 
    { 
    implA = pimplA; 
    implB = pimplB; 
    implC = pimplC; 
    implD = pimplD; 
    } 


    // @overidde methods from InterA as return implA ->method(); 
    // @overidde methods from InterB as return implB ->method(); 
    // @overidde methods from InterC as return implC ->method(); 
    // @overidde methods from InterD as return implD ->method(); 
} 

這樣,你只需要創建A,B,C和d的一些情況,並在ABCD的建設通過他們。然後ABCD只需要調用他們的方法

通過這樣做,您將重用A,B,C和D的實現

0

在java中沒有「真正的」多繼承這樣的事情。你不能做某事。像public class D extends C,B,A {} 所有你能做的就是要麼實現多個接口也可以使B伸出A,C擴展B和d延長ç

2

接口的目的是爲了確保實現該接口將實現該接口聲明的所有方法的類。

如:

public interface Flyer { 

    public void fly(); 
} 

以上接口可確保實現傳單接口的Java類將有蒼蠅方法的實現,飛行是如何實現的irregardless。

如:

public class Bird implements Flyer { 

    public void fly() { 
     System.out.println("Bird is flapping"); 
    } 
} 

而另一如:

public class Eagle implements Flyer { 

    public void fly() { 
     System.out.println("Eagle is soaring"); 
    } 
} 

用的接口,我確信飛()方法,儘管不同的實現存在。

所以,如果你想擁有的4個不同的接口的行爲,如接口在不同類ABCD,B,C和d,然後就可以實現:

public class ABCD implements A,B,C,D { 

    // methods here 
} 

通常情況下,我們使用接口來繼承行爲和父/子類繼承的典範。

那麼我們如何使用Flyer界面呢?

示例代碼:

public class FlyerTest { 

    public static void main (String [] args) { 
     Flyer flyer = new Eagle(); 
     flyer.fly(); // Prints out "Eagle is soaring" 

     flyer = new Bird(); 
     flyer.fly(); // Prints out "Bird is flapping" 
    } 

} 

正如你看到的,只要我有傳單,我很放心的是,「飛」的方法將有一個實現。這不需要我懷疑方法是否真的存在。

這就是爲什麼我們使用接口來繼承行爲。

希望你對多繼承有更好的理解。

要回答你的核心問題,面向對象編程是一種有助於促進代碼重用的方法。

+0

感謝您的解釋... – Manoj

0

java中沒有多重繼承。你爲什麼不用ABCD創建這些類的對象,並使用它們來訪問這些類的方法?