簡體   English   中英

了解多重繼承和接口

[英]To understand Multiple inheritance and interfaces

我在某種程度上了解多重繼承和接口。 是否可以使用多重繼承來達到我的要求?

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

我已經在類A,B,C,D中定義了InterA,InterB,InterC,InterD中的方法的實現,而我不想在ABCD類中再次定義。 如何用Java做到這一點?

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

例如:

public interface Flyer {

    public void fly();
}

上面的接口可確保任何實現Flyer接口的Java類都將具有fly方法的實現,而不管Flight是如何實現的。

例如:

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");
    }
}

通過一個接口,我確信盡管實現方式不同,fly()方法仍將存在。

因此,如果您想要一個具有4個不同接口(如接口A,B,C和D中指定)的行為的ABCD類,則可以實現:

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"
    }

}

如您所見,只要我有一個Flyer,就可以確信“ fly”方法將具有實現。 這使我無需懷疑該方法是否確實存在。

這就是為什么我們使用接口來繼承行為。

希望您對多重繼承有更好的了解。

為了回答您的核心問題,面向對象編程是一種有助於總體上促進代碼重用的編程。

由於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的實現

java中沒有“真正的”多重繼承之類的東西。 你不能做某事。 public class D extends C,B,A {}所能做的就是要么實現多個接口,要么可以使B擴展A,C擴展B和D擴展C

Java中沒有多重繼承。 為什么不只在ABCD中創建這些類的對象並使用它們來訪問那些類的方法?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM