为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Java中没有多重继承,但允许实现多个接口?

为什么Java中没有多重继承,但允许实现多个接口?

为什么Java中没有多重继承,但允许实现多个接口?Java不允许多重继承,但它允许实现多个接口。为什么?
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

因为接口只指定什么全班都在做,而不是多么,怎样它在做这件事。

多重继承的问题是两个类可能定义不同方式做同样的事情,子类不能选择哪一个。


查看完整回答
反对 回复 2019-07-15
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我的一位大学老师这样对我解释说:

假设我有一个类,一个是烤面包机,另一个类是核轰炸机。他们可能都有“黑暗”的背景。它们都有一个on()方法。(其中一个有OFF(),另一个没有)。如果我想创建一个这两个类的子类.如你所见,这是一个可能在我面前爆炸的问题。

因此,其中一个主要问题是,如果您有两个父类,它们可能有相同特性的不同实现-或者可能有两个同名的不同特性,如我的讲师的例子中所示。然后,您必须决定您的子类将使用哪个子类。当然,有处理这个问题的方法-C+就是这样做的-但是Java的设计者认为这会使事情变得太复杂。

但是,使用接口,您可以描述类能够做的事情,而不是借用另一个类的方法来做一些事情。与多个父类相比,多个接口导致需要解决的棘手冲突的可能性要小得多。


查看完整回答
反对 回复 2019-07-15
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

这个问题的答案在于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)将无法创建构造函数链(编译时间歧义).

对于接口,这是允许的,因为我们不能创建它的对象。

对于新的概念defaultstatic方法请参阅默认接口.

希望这将解决您的查询。谢谢。


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 710 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信