主流编程语言多继承的原因
java为什么不支持多继承?
简化继承逻辑,避免菱形继承关系等可能造成的冲突。当你继承的两个父类有同样签名的方法时要怎么确定哪个覆盖哪个呢?如果这两个方法又是通过继承得来的。那么你可能会掉入一个坑,还不知道怎么死的。
先说说多继承和单继承的区别。举个例子,如果在武侠世界,多继承意味着人们可以加入多个门派,学习多种武功,集百家之长,风险就是需要自行判断这些武功是否兼容,好的例子是郭靖,坏的例子则是鸠摩智;单继承的武侠世界,人们只能加入一个门派,学习到这个门派的所有武功,缺点是外人可能以为你只会本门武功,即使你自创了更厉害的,他们也不知道。
Java从一开始就不支持多继承,主要的原因还是为了简化语言,避免多继承带来的复杂性。相比多接口,多继承机制中一个类可以继承多个类,拥有所有父类的功能,是一种更强大的语言特性,但是对于编程语言来讲,要想实现多继承,语法、编译等方面会十分复杂,因此j***a语言宣称多接口能够满足需要,但随着时间的推移,官方也在尝试弥补这个缺陷,j***a8中,接口引入默认实现,这也向多继承靠近了一步。至于j***a最终是否会支持多继承,还要时间来见证。
谢谢邀请,这里我简单的说一下我的看法这里要区分一下j***a8之前和之后:
首先学习j***a要从生活去探讨,这事情就没那么复杂了,举个最简单的例子,一个人有一个亲生父亲,这是对的吧!那么j***a中将生活中的例子在类中很好的体现了出来!继承的主要目的就是子承父业,达到更好的代码复用性!
***设A->继承B 那么由此可以得到B类中方法A类中时可以使用的(注意这里不说修饰符的问题);
再***设A->继承B A-> 继承C ,而此时B和C类中都声明了某一个同名的方法,这样A类就尴尬了,A类中并没有重写B、C中的方法,那么A类使用时到底用B呢?还是C呢?
我估计A自己也是迷糊的,哈哈。那么为了避免这样尴尬的事情发生,j***a不允许出现这种情况。但是值的注意的时:j***a中时存在多继承的,就是接口:
这里就好玩了,为什么接口可以?注意接口是一种规则的体现,它阐述的是一种标准:
***设员工类继承了人类,我们知道,人类有一些特性,但是不同的员工类他的职责是不同的,比如:A员工(一个员工的实例),他是一个文员,他用电脑用的特别好,而且会打篮球。同样B员工(一个员工的实例),他是一个财务,他也会电脑,但是他会踢足球。那么此时会有一个问题,我们上述的三个功能:玩电脑,踢足球,打篮球 要不要放在人类中,我们知道员工类继承自人类。
答案是不要,因为这样会导致父类过于臃肿。此时接口就出现了,Emp(员工) extends Person(人类) implement PlayFootball ,这样是不是更好呢!一个球踢得好的,可能是不是同样很熟悉踢足球的规则呢,那么就有了 PlayFootball extends Chiese(中国的蹴鞠) extends English(英式篮球)。因为标准很多呀,一个足球运动员会体足球,他同样可能短跑也很厉害!
不晓得这样说能不能让大家理解,因为是全手到,所以实在不愿意花精力,大家有问题可以直接关注我的头条号:IT蛇精病,有事私聊就行!嘿嘿 或者右上角关注一波!哈哈,之前有发过这方面的文章,大家可以看看
[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。转载请注明出处:http://www.wnpsw.com/post/21515.html