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