Java的继承与实现

news2025/1/20 18:33:52

一、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 )之后就不那么绝对。

虽然我们还是没办法用extends同时继承多个类,但是因为有了默认函数,可能通过implements从多个接口中继承到多个默认函数,那么,又如何解决这种情况带来的菱形继承问题呢?

未完待续......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通信算法之153: 基于Matlab的OFDM通信系统关键基带算法设计

1. 发射机 TBD 2. 接收机 定时同步主要包括帧(分组)同步和符合同步两种,其中帧同步用于确定分组的起始位置。而符合同步在于正确地定出OFDM符号数据部分的开始位置,以进行正确的FFT操作。 载波频率同步先检测出频率偏移&#xf…

论文精读《Optical Measurement of Highly Reflective Surfaces from a Single Exposure》

摘要 高反射表面的三维结构光 (SL) 测量是工业计量面临的挑战。 高动态范围(HDR)技术通过融合多重曝光下的图像提供了解决方案; 然而,这个过程非常耗时。 本文报告了一种基于 SL 的新方法,仅通过一次曝光即可测量具有…

【Linux】配置系统默认启动内核版本方式

查看默认启动内核 这是一个在Linux系统中使用的命令行,用户通过该命令行查看并编辑GRUB2引导加载程序环境变量。具体含义如下: saved_entry6752e052c66d4923aeeb3f42f123175e-4.18.0-348.7.1.el8_5.x86_64:当前设置的默认启动项为ID为"…

网络安全这条路到底该怎么走?

我之前就写过一篇文章专门解答了这个问题。但是还是有很多小伙伴并不清楚这条路该怎么走下去! 不同于Java、C/C等后端开发岗位有非常明晰的学习路线,网路安全更多是靠自己摸索,要学的东西又杂又多,难成体系。 网络安全虽然是计算…

Python学习之简易视频播放器

先上效果图: 这个就是用python-pyqt5-opencv做出来的简易视频播放器,主要实现本地视频文件播放、本地摄像头播放和远程摄像头播放三个功能。 核心代码: def ShowCamera(self, url):try:if url None:self.cap cv2.VideoCapture(0)else:sel…

别再犯这些错误,WEB自动化测试实施与误区

目录 前言: 一、WEB自动化测试的实施 1. 确定测试框架 2. 定义测试用例 3. 配置测试环境 4. 执行测试用例 二、WEB自动化测试的误区 1. 盲目追求全覆盖 2. 忽视测试代码的质量 3. 忽略测试环境的差异性 4. 缺乏测试结果分析和问题处理 5. 忽视测试人员的…

移动安全逆向实战(一)

小杂谈 搞了差不多两年移动安全发现多动手才能学到新东西,故此推出app逆向实战系列用于记录破解各个app的安全防护,以此勉励。 一些括号内词句读者自动脑补表情包,狗头保命[doge] 正文 frida反调试 将某8样本app塞进jadx查壳,数…

Agitek安泰测试与您相约第5届中国国际计量测试技术与设备博览会

展会时间:2023年5月17日至19日 展会地点:上海世博展览馆(上海.浦东) 展位号:2号馆423 2023年5月17日至19日,第5届中国国际计量测试技术与设备博览会将在上海世博展览馆举办,西安安泰测试Agite…

硬科技,创未来!第十五届深创赛福田预选赛-华秋第九届硬创大赛正式启幕

自2015年首次启动至今,由深圳华秋电子有限公司主办的“华秋中国硬件创新创客大赛”不断提升,赛事范围覆盖华南、华东、华北三大地区,累计影响超过45万工程师群体,吸引了35000多名硬创先锋报名参与。 2023年华秋第九届中国硬件创新…

​文生视频: 任务、挑战及现状

示例视频由 ModelScope 生成。 最近生成模型方向的进展如排山倒海,令人目不暇接,而文生视频将是这一连串进展的下一波。尽管大家很容易从字面上理解文生视频的意思,但它其实是一项相当新的计算机视觉任务,其要求是根据文本描述生成…

润秋商业案例分析,带你了解商业背后的秘密~~

商润秋商业案例分析,带你了解商业背后的秘密~~业模式的好坏直接奠定了公司未来的发展和当前的盈利能力。确实我们一个好的商业模式,往往可以让业务更稳定,发展更快。但一个好的商业模式必须满足几个条件: 1.帮助解决用户的流量问…

【C++】类和对象详解(2)

【C】类和对象(1) 文章目录 一、类的6个默认成员函数1.1 构造函数1.2 析构函数1.3 拷贝构造函数1.4 赋值运算符重载1.5 取地址及const取地址操作符重载const成员 一、类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真…

吴恩达OpenAI基于ChatGPT的Prompt开发教程

吴恩达OpenAI基于ChatGPT的Prompt开发教程 1.如何给出清晰具体的提示 1.1大模型分类: Base LLM基础大语言模型来源于预训练模型:用已有单词推测下一个单词。 Instruction Tuned LLM指令大语言模型:用人类反馈微调大语言模型优化回答。 当我们…

AMS启动报错 hbase-ams-master.pid doesn‘t exist after starting of the component

感谢点赞和关注 ,每天进步一点点!加油! 目录 ​ 一、问题描述 二、解决办法 一、问题描述 Ambari Metrics, Metrics Collector 启动报错如下: stderr: Traceback (most recent call last):File "/var/lib/ambari-agen…

网站被黑后的紧急处理恢复正常步骤是什么?

随着时代的发展网站使用的频率是逐步增加。然而,随着互联网技术的不断进步,网站安全问题也引起了广泛关注。其中,最严重的问题是网站被黑客攻击。那么,何谓网站被黑?它可能会给企业和用户带来哪些风险? 一、…

屏幕录像工具哪个好?这3款录屏工具就很不错!

案例:有没有好用的录屏工具分享? 【每次对电脑屏幕进行录制都要花费我很多时间,录制的内容质量还差,真是事倍功半。听说使用好的录屏工具可以提高录屏的效率,那录屏软件哪款好用?在线蹲一款!】…

【AIGC】阿里云服务器配置stable-diffusion-webui

阿里云服务器部署SD全流程, 正在更新!!! 购买阿里云实例开始部署开始运行安装插件中文插件从civitai上下载模型, 加载并利用其绘图 购买阿里云实例 我感觉应该不止我一个,点进阿里云的官网后,发现里面的内容太多&…

【爬虫逆向】Python加密算法大揭秘:应用场景与实现技巧

前言:​ 在我们进行js逆向的时候. 总会遇见一些我们人类无法直接能理解的东西出现. 此时你看到的大多数是被加密过的密文.今天在这里教大家各种加密的逻辑。 Python助学大礼包点击跳转获取 目录 一、一切从MD5开始二、URLEncode和Base64三、对称加密四、非对称加密…

Neo4j之APOC安装与使用样例

1 APOC简介 APOC即Awesome Procedures on Cypher ,是 Neo4j 最大和最广泛使用的扩展库,是Neo4j过程和函数的标准实用程序库。它包括 450 多个标准程序,提供实用程序、转换、图形更新等功能。它们得到很好的支持,并且很容易作为单…

超详细canal入门

我们都知道一个系统最重要的是数据,数据是保存在数据库里。但是很多时候不单止要保存在数据库中,还要同步保存到Elastic Search、HBase、Redis等等 一、什么是canal 我们先看官网的介绍 canal,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供 增量…