已关闭,此问题为opinion-based。目前不接受答复。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。
昨天关门了。
Improve this question
我们知道抽象类包含抽象和非抽象方法,那么如果我们只有抽象方法,以便我们可以实现类似接口的多重继承呢?
下面是一个例子:
public abstract class superclass1 {
public abstract void func ( );
}
public abstract class superclass2 {
public abstract void func ( );
}
public class test extends superclass1 , superclass2 {
/* Code goes here */
}
我知道上面的代码是不可能的,但为什么Java不允许它,因为我们只有在扩展它之后才定义类体,就像接口一样,并且正确地工作,所以不会有歧义,也不会有问题。
1条答案
按热度按时间oxf4rvwz1#
好吧,回答你的问题“为什么Java不允许它?”“:“Java不支持类中的多重继承,因为它可能导致钻石问题,而不是提供一些复杂的方法来解决它,有更好的方法,通过它我们可以实现与多重继承相同的结果。”
你说,但是我的类只包含抽象方法,对吗?但你如何保证它将来不会改变呢?如果你有10个纯抽象类,并从它们中继承了100个类的所有组合,然后你决定向其中一个类添加一个非抽象方法,那该怎么办?如果你的父类是一个库类,你甚至不知道谁以及如何继承它。为了避免这种复杂性,Java说:如果需要纯抽象类和多重继承,只需使用接口。在实践中,我从来没有遇到过这种限制的大问题。实际上,换个Angular 来看,我在C++中看到过这样的例子,从类的多重继承导致了一个非常复杂的解决方案,很难维护。