首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Java不允许多重继承,而允许使用默认实现符合多个接口

为什么Java不允许多重继承,而允许使用默认实现符合多个接口
EN

Stack Overflow用户
提问于 2018-10-03 14:29:34
回答 3查看 6.9K关注 0票数 51

我不是在问这个-> Why is there no multiple inheritance in Java, but implementing multiple interfaces is allowed?

在Java中,不允许多重继承,但是在Java 8之后,接口可以有默认方法(可以自己实现方法),就像抽象类一样。在这种情况下,还应该允许多重继承。

代码语言:javascript
复制
interface TestInterface 
{ 
    // abstract method 
    public void square(int a); 

    // default method 
    default void show() 
    { 
      System.out.println("Default Method Executed"); 
    } 
} 
EN

回答 3

Stack Overflow用户

发布于 2018-10-03 14:44:20

Java不允许字段的多重继承。这在JVM中很难支持,因为您只能引用标头所在的对象的开头,而不能引用任意的内存位置。

在Oracle/Openjdk中,对象有一个头部,后面跟着最超类的字段,然后是下一个最超类的字段,等等。这将是一个重大的变化,允许一个类的字段相对于不同子类的对象的头部出现不同的偏移量。最有可能的是,对象引用必须成为对对象标头的引用和对字段的引用才能支持这一点。

票数 14
EN

Stack Overflow用户

发布于 2018-10-03 14:49:10

我认为这主要与“钻石问题”有关。现在,如果你用同一个方法实现多个接口,编译器会强制你重写你想实现的方法,因为它不知道该使用哪一个方法。我猜想当接口不能使用默认方法时,Java创建者想要消除这个问题。现在他们提出了一个想法,那就是能够在接口中实现方法是件好事,因为你仍然可以在流/ lambda表达式中使用这些方法作为函数接口,并在处理过程中利用它们的默认方法。你不能用类做到这一点,但是菱形问题仍然存在。这是我的猜测:)

票数 4
EN

Stack Overflow用户

发布于 2021-05-24 03:37:35

JAVA确实支持多重继承。如果你对编程语言JAVA做一个全面的比较,你就会知道我是真的。

Java的顶层类或祖先层次结构中的根类是Object类。这个类是所有其他类的超类。因此,我们在API中声明或预定义的Java中的每个类都继承这个对象类。

此外,Java为我们提供了继承另一个我们选择的类的能力。

因此,我们可以说我们正在执行互锁的多重继承。

第二种方式

Java支持接口的多重继承。因此,您可以使用任意多个接口实现。但请注意,实现一个接口并没有定义一个关系,因为在继承类的情况下是可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52620936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档