为什么很多不使用多继承?而是选择继承类+实现接口? 这个有什么好处?-灵析社区

Mia好纠结

我们知道在面向对象编程的时候,比如Bird既有叫的功能,又有飞的功能,可以通过继承Animal和实现飞的接口的功能实现: class Animal { shout() { } } interface OtherFunction { fly():void } class Bird extends Animal implements OtherFunction { shout() { console.log('呜呜') } fly() { console.log('飞到北京天安门') } } **问题1:** 为什么很多不使用多继承?而是选择继承类+实现接口? 这个有什么好处? 如果还有其他类的功能比如: class Vegetarian { eat() { console.log('吃素') } } **问题2:** Bird想要继承吃素的功能,请问这个如何进行实现呢?就不能进行继承了对吗?

阅读量:201

点赞量:0

问AI
在多继承中,如果一个类从两个不同的父类继承,而这两个父类又有一个共同的祖先类,那么在实际调用祖先类的方法时,编译器可能不知道该选择哪个路径,这就会导致混乱。例如: class A { void method() { System.out.println("A"); } } class B extends A { void method() { System.out.println("B"); } } class C extends A { void method() { System.out.println("C"); } } class D extends B, C { // D应该继承哪个method()? } 这种情况在 C++ 中通过复杂的规则来解决,但它也增加了代码的复杂性和理解的难度。Java 为了保持语言的简单性和一致性,选择不支持类的多继承。 Bird想要继承吃素的功能,要么使Animal继承Vegetarian类,要么将Vegetarian做成接口,Java 提供了接口(interface)作为多继承的替代方案。虽然一个类只能继承一个父类,但它可以实现多个接口。