前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java为什么不支持多继承

Java为什么不支持多继承

作者头像
闻说社
发布2023-03-10 17:06:34
4380
发布2023-03-10 17:06:34
举报

首先,思考这么一种场景,假如现在A类继承了B类和C类,并且B类和C类中,都存在test()方法,那么当A类对象调用test()方法时,该调用B类的test()呢?还是C类的test()呢?是没有答案的,所以Java中不允许多继承。

但是,Java中接口是可以多继承的,比如:

代码语言:javascript
复制
public interface A {
    void test();
}

public interface B {
    void test();
}

public interface C extends A, B{
    
    
}
复制代码

为什么接口可以?

因为都是A、B、C都是接口,就算A、B两个接口中都定义了test方法,因为接口中只是声明了方法,并没有真正实现方法,所以对于C接口而言并不会照成困扰,对于C接口而言它只是继承了同一个test()方法的声明而已,在使用时需要C接口的实现类来实现这个test()方法就可以了。

代码语言:javascript
复制
public class C1 implements C{
    public void test() {
        System.out.println("hello Hoeller");
    }
}
复制代码

那么接口中不是有default方法吗?那不是也可以在接口中来实现方法吗?

我们直接来测试一下:

代码语言:javascript
复制
public interface A {
    default void test() {
        System.out.println("a");
    }
}

public interface B {
    default void test() {
        System.out.println("b");
    }
}

public interface C extends A, B{


}
复制代码

此时C接口会编译报错,报错信息为:

com.hoeller.C inherits unrelated defaults for test() from types com.hoeller.A and com.hoeller.B

翻不翻译都无所谓了,反正就是报错了,表示C接口不能同时继承两个接口中default方法test()。

如果你问,那为什么C++中可以支持多继承,那得解释菱形继承、虚继承,本文就不分析了(因为我也不知道)。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档