1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 为什么类只能单继承 而接口可以多继承?

为什么类只能单继承 而接口可以多继承?

时间:2020-05-01 10:37:55

相关推荐

为什么类只能单继承 而接口可以多继承?

我们都知道,在java当中类只可以单继承,而接口可以多实现.

总结:

(在不重写方法的情况下)接口是可以多继承的,在多继承的过程中子接口并不能对该抽象方法进行修改,到最后,B,C两个method方法在D中合二为一了。

先看一下下面的例子,再来看看这句话哦

我们现在通过菱形继承的例子来验证一下

1.接口的菱形继承(多继承)(抽象方法)

interface A{void method();}interface B extends A{}interface C extends A{}interface D extends B,C{void method(); //方法合二为一}

我们可以看到,因为抽象方法没有方法体,所以子接口的继承并不会影响该方法。

那,如果换成默认方法呢?

注意:如果接口中的抽象方法被换成默认方法了,且子接口不要脸的重写了默认方法(虽然默认方法是可以不被重写的),那菱形继承就会发生错误。

interface A{public default void method(){}}interface B extends A{@Overridepublic default void method(){System.out.println("B不要脸的重写了A的默认方法");}}interface C extends A{@Overridepublic default void method(){System.out.println("C不要脸的重写了A的默认方法");}}interface D extends B,C{//编译报错 不能合二为一了}

你看,子接口继承默认方法并重写了,影响了method方法,所以菱形继承发生错误了。

2.类只能单继承的,

**总结:**因为类在继承的过程中可以重写该方法,B C方法虽然都是method,但是,由于B,C中的method是有方法体的,可以重写内容,所以不一样了。随后,到了D中,这两个方法同名,但又不是重载形式,故矛盾了。

先看看下面的例子,再返回来看上面这段话。

class A{public void method(){}}class B extends A{@Overridepublic void method(){System.out.println("bbb");}}class C extends A{@Overridepublic void method(){System.out.println("ccc");}}class D extends B,C{//类编译错误}

于是,我们又发现,子类继承父类,重写了这个方法,也影响了该方法,所以菱形继承发生错误了。

本人水平有限,如果有什么不对的地方,欢迎各位大佬指正。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。