Java为什么不支持多继承


具体的内容可以看上面这篇文章,下面只是概括出来几个点:

1:Java之父,James Gosling在1995年的一份白皮书中给出了关于为什么不支持多继承。
     “JAVA omits many rarely used, poorly understood, confusing features of C++ that in our experience bring more grief than bene?t. This primarily consists of operator overloading (although it does have method overloading), multiple inheritance, and extensive automatic coercions.

     主要就是说,Gosling认为,多继承是一种很少使用,并且很容易混淆的特性,所以Java语言就像删除操作符重载特性一样删除了多继承这种特性。

2:Java是通过接口实现多继承的说法,有待商榷。
     这一段,原作者写的比较混乱,他的主要观点是:接口是为了给对象添加属性或者行为的;而继承是指从父类中完全自由的获取实现。

3:多继承,作者有一个形象的图片示意,如下,珀伽索斯(生有双翼的神马,被其足蹄踩过的地方有泉水涌出,诗人饮之可获灵感)是典型的多继承,继承了骏马的身体,以及雄鹰的翅膀。

4、然后作者总结说,为什么不支持多继承,是Java创建者基于设计的一种考虑,主要是两个点:语言要简单易用,以及摒弃极少使用并且容易产生混淆的一些特性。

     两个例证:钻石问题(菱形继承问题)、几乎没有人遇到过需要多继承的场景,即使有,也可以通过设计绕过。



总得来说,这个博文作者,是从Java创始人的一些文献中推测的原因,当然也给出了两个例证。虽然证明逻辑比较混乱,但是非常好的是已经点出来了原因:
     多继承是一种极少使用还非常容易产生混淆的语言特性,在极少数需要使用的场景下,还可以通过设计来绕过(就像上面的飞马,Java中一般是把会飞的翅膀作为一个接口)。所以为了维护语言的简单易用,Java设计之初就摒弃了这种特性。 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。