学习Java——继承与实现
创始人
2025-05-29 09:24:38
0

目录

引言

定义与区别

Java为什么不支持多继承?

菱形继承问题


引言

        之前的博客提到过面向对象有三个特征:封装、继承、多态。也分别介绍过了这三个特性。我们知道,继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。这种派生方式体现了传递性。在Java中,除了继承,还有一种体现传递性的方式叫做实现。那么,这两者方式有什么区别呢?

定义与区别

继承(Inheritance):如果多个类的某个部分的功能相同,那么可以抽象出一个类出来,把他们的相同部分都放到父类里,让他们都继承这个类。

实现(Implement):如果多个类处理的目标是一样的,但是处理的方法方式不同,那么就定义一个接口,也就是一个标准,让他们的实现这个接口,各自实现自己具体的处理方法来处理那个目标

继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。所以,继承的根本原因是因为要复用,而实现的根本原因是需要定义一个标准

在Java中,继承使用extends关键字实现,而实现通过implements关键字。

简单点说,就是同样是一台汽车,既可以是电动车,也可以是汽油车,也可以是油电混合的,只要实现不同的标准就行了,但是一台车只能属于一个品牌,一个厂商。

class Car extends Benz implements GasolineCar, ElectroCar{}

        以上,我们定义了一辆汽车,他实现了电动车和汽油车两个标准,但是他属于奔驰这个品牌。像上面这样定义,我们可以最大程度的遵守标准,并且复用奔驰车所有已有的一些功能组件。

另外,在接口中只能定义全局常量(static final)和无实现的方法(Java 8以后可以有default方法);而在继承中可以定义属性方法,变量,常量等。

特别需要注意的是,Java中支持一个类同时实现多个接口,但是不支持同时继承多个类。 但是这个问题在Java 8之后也不绝对了。

Java为什么不支持多继承?

        一个类,只有一个父类的情况,我们叫做单继承。而一个类,同时有多个父类的情况,叫做多继承。在Java中,一个类,只能通过extends关键字继承一个类,不允许多继承。但是,多继承在其他的面向对象语言中是有可能支持的。像C++就是支持多继承的,主要是因为编程的过程是对现实世界的一种抽象,而现实世界中,确实存在着需要多继承的情况。比如维基百科中关于多继承举了一个例子:

        例如,可以创造一个“哺乳类动物”类别,拥有进食、繁殖等的功能;然后定义一个子类型“猫”,它可以从父类继承上述功能。但是,"猫"还可以作为"宠物"的子类,拥有一些宠物独有的能力。所以,有些面向对象语言是支持多重继承的。

但是,多年以来,多重继承一直都是一个敏感的话题,反对者指它增加了程序的复杂性与含糊性。

菱形继承问题

        假设我们有类B和类C,它们都继承了相同的类A。另外我们还有类D,类D通过多重继承机制继承了类B和类C。

        这时候,因为D同时继承了B和C,并且B和C又同时继承了A,那么,D中就会因为多重继承,继承到两份来自A中的属性和方法。

这时候,在使用D的时候,如果想要调用一个定义在A中的方法时,就会出现歧义。因为这样的继承关系的形状类似于菱形,因此这个问题被形象地称为菱形继承问题。而C++为了解决菱形继承问题,又引入了虚继承

        因为支持多继承,引入了菱形继承问题,又因为要解决菱形继承问题,引入了虚继承。而经过分析,人们发现我们其实真正想要使用多继承的情况并不多。所以,在 Java 中,不允许“实现多继承”,即一个类不允许继承多个父类。但是 Java 允许“声明多继承”,即一个类可以实现多个接口,一个接口也可以继承多个父接口。由于接口只允许有方法声明而不允许有方法实现(Java 8以前),这就避免了 C++ 中多继承的歧义问题。

        但是,Java不支持多继承,在Java 8中支持了默认函数(default method )之后就不那么绝对了。


        勤学苦练硕果累累,虚度光阴两手空空。————《人民日报》

相关内容

热门资讯

长虹华意:第三季度净利润同比下... 10月22日消息,长虹华意公告称,2025年第三季度,公司营业收入为27.21亿元,同比下降7.97...
多氟多:第三季度净利润2672... 10月22日消息,多氟多公告称,第三季度,公司营业收入为24亿元,同比增长5.18%;公司净利润为2...
华特气体:有向新凯来供应少量电... 10月22日消息,有投资者问华特气体,请问公司或控股、参股公司有什么产品或服务可以直接或间接供应新凯...
首驱科技联合清华合肥院,启动超... 10月22日消息,首驱科技今日与清华大学合肥公共安全研究院(清华合肥院)签署战略合作协议,正式启动超...
保利发展:前三季度净利润同比下... 10月21日消息,保利发展(600048.SH)发布2025年第三季度报告,前三季度公司实现营业收入...
拿下超160亿算力大单!千亿东... AI风口之上,算力需求持续爆发。5月5日晚,千亿市值公司东阳光发布公告称,近日公司收到控股子公司东莞...
招商银行还是“别人家的好孩子”... 本文系基于公开资料撰写,仅作为信息交流之用,不构成任何投资建议2026年3月,中东地缘冲突升级,市场...
马斯克解散xAI,更名为Spa... 5月7日消息,据外电报道,科技巨头、世界首富埃隆·马斯克周三宣布,xAI 将解散,不再作为一家独立公...
俄罗斯继续降息对冲下行压力 俄... 4月22日,在俄罗斯外贝加尔斯克站,工作人员对货运列车进行检查。 新华社记者 郝建伟摄稳增长、刺激经...
Anthropic与Space... 当地时间5月6日,Anthropic宣布已与SpaceX签署协议,将全面启用其Colossus 1数...