猿问
为什么Java中没有多重继承,但允许实现多个接口?
为什么Java中没有多重继承,但允许实现多个接口?
Java不允许多重继承,但它允许实现多个接口。为什么?
慕无忌1623718
浏览 711
回答 3
3回答
红糖糍粑
因为接口只指定什么全班都在做,而不是多么,怎样它在做这件事。多重继承的问题是两个类可能定义不同方式做同样的事情,子类不能选择哪一个。
0
0
0
喵喵时光机
我的一位大学老师这样对我解释说:假设我有一个类,一个是烤面包机,另一个类是核轰炸机。他们可能都有“黑暗”的背景。它们都有一个on()方法。(其中一个有OFF(),另一个没有)。如果我想创建一个这两个类的子类.如你所见,这是一个可能在我面前爆炸的问题。因此,其中一个主要问题是,如果您有两个父类,它们可能有相同特性的不同实现-或者可能有两个同名的不同特性,如我的讲师的例子中所示。然后,您必须决定您的子类将使用哪个子类。当然,有处理这个问题的方法-C+就是这样做的-但是Java的设计者认为这会使事情变得太复杂。但是,使用接口,您可以描述类能够做的事情,而不是借用另一个类的方法来做一些事情。与多个父类相比,多个接口导致需要解决的棘手冲突的可能性要小得多。
0
0
0
慕姐8265434
这个问题的答案在于java编译器的内部工作(构造函数链)。如果我们看到java编译器的内部工作:public class Bank { public void printBankBalance(){ System.out.println("10k"); }}class SBI extends Bank{ public void printBankBalance(){ System.out.println("20k"); }}编译后,如下所示:public class Bank { public Bank(){ super(); } public void printBankBalance(){ System.out.println("10k"); }}class SBI extends Bank { SBI(){ super(); } public void printBankBalance(){ System.out.println("20k"); }}当我们扩展类并创建它的一个对象时,一个构造器链将运行到Object班级,等级。以上代码运行良好。但是如果我们有另一个类Car扩展Bank还有一个杂交(多重继承)类调用SBICar:class Car extends Bank { Car() { super(); } public void run(){ System.out.println("99Km/h"); }}class SBICar extends Bank, Car { SBICar() { super(); //NOTE: compile time ambiguity. } public void run() { System.out.println("99Km/h"); } public void printBankBalance(){ System.out.println("20k"); }}在这种情况下(SBICar)将无法创建构造函数链(编译时间歧义).对于接口,这是允许的,因为我们不能创建它的对象。对于新的概念default和static方法请参阅默认接口.希望这将解决您的查询。谢谢。
0
0
0
随时随地看视频
慕课网APP
相关分类
Java
算法与数据结构
数据结构中,与所使用的计算机无关的数据是什么?
1 回答
学完C语言之后是先学数据结构还是先学JAVA好呢?
1 回答
我要回答