设为首页 加入收藏

TOP

为什么Java不支持多继承
2014-11-23 20:28:56 来源: 作者: 【 】 浏览:21
Tags:为什么 Java 支持 继承

最近我的一个朋友进行了几次面试,碰到了一个很容易被问的问题:为什么Java不支持多重继承,尽管他回答Java可以通过实现多个interface的方式实现多重继承,但面试官却依然为什么不支持。也许我的朋友仅仅是阅读了一些相关的博客,因此他过来把这个经典的问题抛给我,类似为什么Java中的String是不可变的常量一样,也许这样做是Java创造者设计决定的。然而我觉得至少以下两个原因是有意义的:


1)避免diamond problem(菱形问题),假设class A有一个foo()方法,class B和Class C都继承了A并实现了foo()方法,Class D 同时继承了Class B、Class C,如果在D中调用foo()方法,那哪个会被调用呢?这个被称为diamond problem,因为这种继承结构与四个边的菱形类似,


A foo()


/ \


/ \


B foo() C foo()


\ /


\ /


D foo()


我认为即使把顶部的class A去掉在D中调用foo()时依然有这样的歧义。


也许有时你还会被问为什么C++支持multiple inheritance而Java却不行,这时我会向他解释下面的第二个原因,这不是技术原因,而是从程序的可维护、可读行上考虑的,然而这只是我个人推测,只有Java设计者才能确认这个原因。Wikipedia 上有各种语言应对diamond problem引起问题的解决方式。


2)第二个更能说服我的原因是多重继承复杂化了设计并在类型转换、构造上带来了更多的问题,并且也没有很多必须使用多重继承的场景,因此为了简单化而不使用多重继承是明智的。为了避免歧义,Java使用interface实现了single inheritance,interface只提供了方法的声明而没有方法的实现,因此在子类中只有一个方法的实现也就不会产生歧义了。



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python基本类型 下一篇OpenvSwitch中端口的抽象层次结构

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: