[英]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.