浅谈 Java 和多重继承
来源:互联网 发布:金融理财软件排名 编辑:程序博客网 时间:2024/06/05 19:16
浅谈 Java 和多重继承
James Gosling在1995年2月发表了一篇名为”Java概览”的Java白皮书,文章解释了Java不支持多重继承的原因。
Java去除了一些C++中很少用、而且被经常误解而错用的功能,如操作符的重载(operator overloading)(尽管Java仍旧保留方法的重载),多重继承(multiple inheritance),以及广泛的自动强迫同型(extensive automatic coercions)。
没有谁比James Gosling更有资格来谈论这个这个话题了。这篇文章将为你介绍他对于Java不支持多重继承的看法。
Java不支持多重继承
首先我们要搞清楚,Java是否支持多重继承。有的人会说,Java中因为一个类可以实现多个接口,所以支持多重继承。错!Java不支持多重继承。如果你不相信我说的,那么再回到上面,重新读读Java之父的原话吧。
对于Java通过接口来实现多重继承的这个错误观点是有的程序员胡编乱造的。接口相对于具体的类赋予了我们更多的灵活性。我们可以一个类实现多个接口。这是约定俗成的,我们可以用两个’框架蓝图’来创造一个类。
我们做的只是实现多重接口,这里我们不是扩展(继续)什么类,而是实现一个类,在其中添加一些属性和行为。这不是从父类中直接获得一些行为和属性。在这里,我再次强调,Java不支持多重继承。
多重继承
多重继承是一个子类从多个父类中继承属性和方法。C++, Common Lisp是时下支持多重继承的流行语言。
为什么Java不支持多重继承?
现在我们清楚了Java不支持多重继承了,那么Java为什么要这么做呢?这是Java创造者们的决定,最好的理由是因为简单,以及我们很少会用到它。
简单
我想在这里分享一下James Gosling对于Java的定义。
Java: 一种简单的,面向对象的,分布式的,解释型的(译者注:Java既不是纯解释型也不是纯编译型的语言),健壮的,安全的,架构中立的,可移植的,高性能的,支持多线程的,动态语言。
看看定义的美妙之处吧。现代程序语言应该有这样的特性。我们看到,定义第一个特性是什么?是简单。
为了强化简单这个特点,这就是我们去除多重继承的原因。下面来看个例子,多重继承的菱形继承问题。
多重继承的钻石问题
有两个类B和C继承自A。假设B和C都继承了A的方法并且进行了覆盖,编写了自己的实现。假设D通过多重继承继承了B和C,那么D应该继承B和C的重载方法,那么它应该继承哪个的呢?是B的还是C的呢?
C++中经常会掉入这个陷阱,虽然它也提出了替代的方法来解决这个问题。我们在Java中就不会出现这个问题。就算两个接口拥有同样的方法,实现的类只会有一个方法,这个方法由实现的类编写。动态的加载类会让多重继承的实现变得困难。
很少使用
我们使用Java已经很长时间了,我们有多少次因为缺少多重继承而面临困难呢?我个人的经验是一次都没有。因为多重继承很少有机会被用到,所以更安全的做法是去掉它而保持简单性。
就算是碰到需要多重继承的情景,我们也可以找到替代方法。
我的观点是,去掉对多重继承的支持不是Java的缺陷,对开发者来说是件好事。
转载 2017-12-05 ImportNew
阅读全文
0 0
- 浅谈 Java 和多重继承
- 浅谈多重继承
- 浅谈多重继承
- C#接口浅谈(多重继承)
- Python的多重继承和Java的单继承
- Java 中的多重继承
- java实现多重继承
- Java中的多重继承
- java 多重继承
- java 实现多重继承
- java实现多重继承
- java实现多重继承
- JAVA实现多重继承
- 多重继承和虚拟继承
- 多重继承和虚继承
- 多重继承和虚继承
- 多继承和多重继承
- 多重继承和虚基类
- mybatis系列八:一对多关联查询
- smarTTY 使用 公钥 ( public ssh key ) 设置免密远程登录
- 【MongoDb学习之路】Java利用MongoClient类连接MongoDB数据库
- 根本不受我控制的浮动(一定要贴原创真的很尴尬)
- 处理区间问题要预处理(计算星期几)
- 浅谈 Java 和多重继承
- selenium+python自动化测试(1)
- CSS 框模型概述
- 最大似然估计和最大后验概率估计的区别
- pygame库写游戏——入门<7>——python.draw
- 信息隐藏技术与应用期末复习
- Mac安装软件时提示已损坏的解决方法
- 浅谈 Java 中的对象序列化
- ubuntu 下给github 添加ssh密钥