面向对象基础-继承

1.继承定义

继承是一种**“is-a”**(“是一个”)关系,它表示一个类是另一个类的特殊化版本。

2.继承作用

通过继承,子类能够获取父类的属性方法,并且可以对这些属性和方法进行增强、扩展或重写

3.继承特点

3.1子类继承父类成员
  • 字段(属性):子类可以继承父类的字段,但如果字段是 private,则子类不能直接访问该字段,只能通过父类的公共方法访问。
  • 方法:子类继承父类的非私有方法,且可以在子类中重写这些方法以改变行为。
3.2子类可以重写父类的方法

子类可以通过方法重写(Override)改变从父类继承下来的方法的行为。重写方法时,方法名、参数列表、返回类型必须与父类方法完全相同。

  • 父类的方法被标记为 final 时,子类不能重写该方法。
  • 父类的 private 方法也不能被重写,因为它们对子类是不可见的。
3.3使用 super 调用父类成员

4继承的优势

4.1代码重用

继承允许子类重复使用父类的代码,这减少了代码的重复性。例如,子类自动继承了父类的属性和方法,无需重新编写,从而提高了代码的可复用性。

4.2可扩展性

通过继承,子类能够扩展父类的功能,而无需修改父类的代码。这为系统的扩展提供了极大的灵活性。

4.3模块化设计

继承使得复杂系统可以通过分层结构进行模块化设计,父类提供基本功能,子类提供更具体的实现和扩展。这种设计方式有助于简化复杂系统的开发和维护。

5.继承的局限性

虽然继承带来了很多好处,但在使用时也存在一些潜在问题。

5.1单继承限制

Java 中只支持单继承,一个类只能继承一个父类。这虽然简化了类层次结构,但也带来了一些灵活性上的限制。Java 通过接口的机制部分解决了这个问题。

5.2继承可能导致过度耦合

过度使用继承可能导致父类和子类之间的高度耦合,修改父类时可能会影响所有子类。这使得代码的维护变得困难,特别是在层次结构非常深的情况下。

5.3菱形继承问题

在支持多重继承的语言中,继承会引发菱形继承问题,即当一个类继承两个父类,而这两个父类有相同的方法时,子类不知道该继承哪个方法。Java 通过禁止类的多重继承,避免了这个问题,但在接口继承中仍可能遇到类似的问题。

6.继承与组合的权衡

在面向对象设计中,继承是实现代码复用的方式之一,但并非唯一方式。组合(Composition)是另一种设计模式,它通过**“has-a”**(“有一个”)关系实现复用。相比继承,组合具有更好的灵活性。

继承(Inheritance):
  • “is-a” 关系(如“狗是一个动物”)。
  • 强依赖于父类,父类的改变会影响子类。
  • 更适合表达类的层次关系,或者当子类需要复用父类的功能时。
组合(Composition):
  • “has-a” 关系(如“汽车有一个引擎”)。
  • 通过将对象作为类的成员来复用代码,类与成员对象之间的依赖性较弱。
  • 组合提供了更好的灵活性,因为它不依赖继承树。
何时使用继承?
  • 当类之间存在明显的**“is-a”** 关系时,适合使用继承。
  • 需要重用父类的功能,并对其进行增强时。
  • 子类不需要对父类的实现进行太多修改或扩展时。
何时使用组合?
  • 当类之间的关系更像是**“has-a”** 关系时,组合是更好的选择。
  • 需要更灵活的代码复用机制时,组合比继承更易于维护。
  • 需要避免深层次的继承结构时,组合提供了更平坦的设计。

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

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

相关文章

计算机网络——应用层(DNS域名系统、文件传输协议FTP、远程终端协议TELNET、万维网)

应用层概述 不同网络应用的应用进程之间,还需要用不同的通信规则。因此在运输层协议之上,还需要有应用层协议。 每个应用层协议都是为了解决某一类应用问题,而问题的解决又必须通过位于不同主机中的多个应用进程之间的通信和协同工作来完成。…

C++算法练习-day2——27.移除元素

题目来源:. - 力扣(LeetCode) 题目思路分析 给定一个有序数组和一个目标值,题目要求从数组中移除所有等于目标值的元素,并返回移除后数组的新长度。注意,题目要求原地修改数组,即不使用额外的…

YoloV8改进:Block改进|使用ContextAggregation模块改善C2f模块|即插即用

摘要 在计算机视觉领域,目标检测与实例分割任务一直是研究的热点。YoloV8作为目标检测领域的佼佼者,凭借其出色的性能和效率赢得了广泛的认可。然而,随着技术的不断进步,如何进一步提升YoloV8的性能成为了我们追求的目标。近期,我们引入了ContextAggregation模块对YoloV8…

信息安全工程师(53)网络安全审计机制与实现技术

前言 网络安全审计机制是指为了保护网络安全并发现潜在风险和漏洞而进行的一系列审计活动。审计的目的是检查并评估网络系统的安全性,以确保其符合相关法律法规和安全标准。 一、网络安全审计机制的重要性 网络安全审计机制对于保护组织的信息资产和敏感数据至关重要…

LabVIEW提高开发效率技巧----高效文件I/O

在LabVIEW开发中,文件I/O操作常常是性能瓶颈之一,特别是处理大数据时,如何高效地存储和读取数据显得尤为重要。本文将详细介绍如何利用TDMS Streaming来实现高效的文件I/O,并结合具体例子说明在实际开发中的应用技巧。 1. 什么是T…

[漏洞挖掘与防护] 04.Windows系统安全缺陷之5次Shift漏洞启动计算机机理分析

这是作者新开的一个专栏——“漏洞挖掘与防护”,前期会复现各种经典和最新漏洞,并总结防护技巧;后期尝试从零学习漏洞挖掘技术,包括Web漏洞和二进制及IOT相关漏洞,以及Fuzzing技术。新的征程,新的开启,漫漫长征路,偏向虎山行。享受过程,感谢您的陪伴,一起加油~ 欢迎关…

迅为RK3562开发板/核心板240PIN引脚全部引出,产品升级自如

可应用于人脸跟踪、身体跟踪、视频监控、自动语音识别(ASR)、图像分类驾驶员辅助系统(ADAS)、车牌识别、物体识别等。 iTOP-3562开发板/核心板采用瑞芯微RK3562处理器,内部集成了四核A53Mali G52架构,主频2GHZ,内置1TOPSNPU算力,R…

Gin框架操作指南08:日志与安全

官方文档地址(中文):https://gin-gonic.com/zh-cn/docs/ 注:本教程采用工作区机制,所以一个项目下载了Gin框架,其余项目就无需重复下载,想了解的读者可阅读第一节:Gin操作指南&#…

Redis Geo 数据类型解析:基于 ZSET 的高效地理位置管理0708

根据官网介绍: Bitmaps are not an actual data type, but a set of bit-oriented operations defined on the String type which is treated like a bit vector. Since strings are binary safe blobs and their maximum length is 512 MB, they are suitable to s…

【回顾一下AQS知识,关于公平锁与非公平锁】

文章目录 一.什么是AQS二.公平锁和非公平锁实现三.公平锁和非公平锁的区别四.小结 一.什么是AQS AQS,全称 AbstractQueuedSynchronizer,是 Java 中用于构建锁和同步器的一个基础框架类,位于 java.util.concurrent.locks 包中。AQS 通过一个先…

Android 15 推出新安全功能以保护敏感数据

Android 15 带来了增强的安全功能,可保护您的敏感健康、财务和个人数据免遭盗窃和欺诈。 它还为大屏幕设备带来了生产力改进,并对相机、消息和密钥等应用进行了更新。 Android 防盗保护 Google 开发并严格测试了一套全面的功能,以在盗窃之…

Java基础(6)

深拷贝和浅拷贝区别了解吗?什么是引用拷贝?关于深拷贝和浅拷贝区别,我这里先给结论:浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部…

谷歌浏览器如何展示小于12px的字

在谷歌浏览器里面&#xff0c;字体最小只能设置为12px&#xff0c;但是我们有时候需要展示更小的文字。方法如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" co…

【计算机科学】什么是ASCII码?

引言 在计算机技术的世界里&#xff0c;字符编码是一个至关重要的概念&#xff0c;它决定了我们如何将文本字符存储、传输和处理。ASCII码&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;是字符编码中的一项基础…

java关于如何实现读取各种类型的文件核心属性方法,比如获取标题和作者、主题等;附带远程的https的地址文件读取方法;

有两种方法&#xff1a; 通过提供的现成api进行调用读取pdf文件&#xff0c;或doc、xlsx、pptx文件&#xff1b;可能商业需要付费 https://www.e-iceblue.cn/pdf_java_document_operation/set-pdf-document-properties-in-java.html Spire.PDF for Java import com.spire.pdf…

【洛谷】AT_abc188_c [ABC188C] ABC Tournament 的题解

【洛谷】AT_abc188_c [ABC188C] ABC Tournament 的题解 洛谷传送门 AT传送门 Vjudge传送门 题解 谔谔&#xff0c;最近月考&#xff0c;没时间写题解。现在终于有时间了qaq 通过对样例的数据分析我们可以看到。本题的考点就是一个二叉搜索树&#xff0c;因此最简单的方法…

Day31 || 122.买卖股票的最佳时机 II、55. 跳跃游戏、 45.跳跃游戏II 、1005.K次取反后最大化的数组和

122.买卖股票的最佳时机 II 题目链接&#xff1a;力扣题目链接 思路&#xff1a;因为是求虽大利润完全可以假设知道第二天涨前一天买入即可&#xff0c;就是求两天只差大于0 的和。 55. 跳跃游戏 题目链接&#xff1a;力扣题目链接 思路&#xff1a;应该从后往前循环判断&…

搜维尔科技:使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据

使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据 搜维尔科技&#xff1a;使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据

【初识数据库】

目录 一、数据库简介 1.什么是数据库 2.数据库与数据结构有啥关系 3.为什么要使用数据库 二、数据库服务器、数据库和表的关系 三、客户端与服务器的通讯方式 1.C/S架构 2.B/S架构 3.命令提示符 4.MySQL架构 一、数据库简介 1.什么是数据库 组织和保存数据的应用程序…

数据结构与算法JavaScript描述练习------第12章排序算法

1. 使用本章讨论的所有算法对字符串数据而非数字数据进行排序&#xff0c;并比较不同算法的执行 时间。这两者的结果是否一致呢&#xff1f; function CArray(numElements) { this.dataStore []; this.pos 0; this.numElements numElements; this.insert insert; this.toS…