Java中为什么是单继承、多接口?(多版本)

Java 中不支持多重继承,而是通过接口实现比多重继承更强的功能,
Java 通过接口使处于不同层次,甚至互不相关的类可以具有相同的行为。

版本一:

Java中为什么是单继承:

若为多继承,那么当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承。

为什么是多实现呢?

通过实现接口拓展了类的功能,若实现的多个接口中有重复的方法怎么办?没有关系,因为实现类中必须重写接口中的方法,所以调用时还是调用的实现类中重写的方法。(接口是抽象类的一种,接口中的方法是都是抽象方法)

那么各个接口中重复的变量又是怎么回事呢?
接口中,所有属性都是 static final修饰的,即常量,这个什么意思呢,由于JVM的底层机制,所有static final修饰的变量都在编译时期确定了其值,若在使用时,两个相同的常量值不同,在编译时期就不能通过。

看一下接口的定义就很清楚了。

在这里插入图片描述

版本二:

在Java语言中禁止多重继承,多继承就是一个类具有多个直接父类。多重继承不合法的原因是容易引发意义不明确。

例如,有一个类C,如果允许它同时继承A类与B类:class C extends A,B{},
假如A、B两个类都有同一种方法fun(),如果定义:
C c = new C();
那么c.fun()应该调用哪一个父类的fun()方法?无法给出答案,因此Java语言禁道止多重继承。

但C++却是可以的,所以C++比起java在语法上难了些。
还有就是,C++语言是1983年在C语言的基础上推出的,Java语言是1995年推出的。其次,在C++被设计出来后,就会经常掉入多继承这个陷阱,虽然它也提出了相应的解决办法,但Java语言本着简单的原则舍弃了C++中的多继承,这样也会使程序更具安全性。

但一个类可以实现专多个接口,这又是为什么?
这一特属性和上一特性结合使用,可以获得和多重继承相似的效果。

现假如类C实现了A与B两个接口:class C implements A,B{};
且这两个接口都有一个抽象fun()方法,现在调用方法时没有任务不明确的地方,因为接口中的所有方法都是抽象的,并且抽象类(接口是抽象类的一种)的任何方法都需在子类中地覆盖实现,所以调用时其实是调用自己本身的实现方法,没有什么调用不明确的说法。

总结

总的来说就是,Java是单继承、多接口机制。
不能多重继承是因为类中的方法不是抽象的,会引起不明确的调用,
但是接口中的方法是抽象的,在类中需要重写,不会引起不明确的调用。
你学会了吗?(✿◡‿◡)

猜你喜欢

转载自blog.csdn.net/xiaobai_qian/article/details/106337307