手机版
你好,游客 登录 注册
背景:
阅读新闻

为什么Java不支持多继承

[日期:2014-09-17] 来源:Linux社区  作者:jinjiating [字体: ]

最近我的一个朋友进行了几次面试,碰到了一个很容易被问的问题:为什么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只提供了方法的声明而没有方法的实现,因此在子类中只有一个方法的实现也就不会产生歧义了。

 

Java 9 的新特性发布 http://www.linuxidc.com/Linux/2014-08/105707.htm

Java编程思想(第4版) 中文清晰PDF完整版 http://www.linuxidc.com/Linux/2014-08/105403.htm

编写高质量代码 改善Java程序的151个建议 PDF高清完整版 http://www.linuxidc.com/Linux/2014-06/103388.htm

Java 8简明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm

Java对象初始化顺序的简单验证 http://www.linuxidc.com/Linux/2014-02/96220.htm

Java对象值传递和对象传递的总结 http://www.linuxidc.com/Linux/2012-12/76692.htm

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-09/106758.htm

linux
相关资讯       Java多继承 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款