news 2026/7/29 2:16:23

【面向对象】三大特性:继承(单继承/多重继承、继承关系)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【面向对象】三大特性:继承(单继承/多重继承、继承关系)

考点频率:★★★★★(选择题必考,尤其爱考单继承与多继承的对比,以及 Java 与 C++ 的区别)
难度:⭐⭐
建议:重点理解“继承是为了复用”,但更要记住“继承不是万能的”

1️⃣ 继承像“遗传”,也像“抄作业”

上篇文章讲了封装——把数据和方法打包在一起,对外只暴露接口。

现在有一个新问题:你写了一个动物类,里面有属性年龄体重,有方法吃()睡()。现在你要写一个类和一个类。

如果从头写,你要在里重复写一遍年龄体重吃()睡()——代码冗余,而且如果吃()的逻辑要改,你得改两处。

继承解决的就是这个问题:

继承是在已有类的基础上创建新类的机制。新类(子类)自动拥有父类(基类)的属性和方法,并且可以增加新的属性和方法,或重写父类的方法。

2️⃣ 继承关系的核心概念

概念含义
父类(基类/超类)被继承的类,代表“更一般”的概念
子类(派生类)继承父类的类,代表“更特殊”的概念
单继承一个子类只能有一个直接父类
多重继承一个子类可以有多个直接父类

关系语义:继承代表“is-a”关系。子类是父类的一种特殊类型。是一种动物,所以可以继承动物

3️⃣ 单继承(Single Inheritance)

定义:一个子类只能有一个直接父类。

特点

  • 结构清晰,类层次呈树状(一根树枝往上追溯只有一条路径)
  • 不易产生冲突(不会出现“两个父类有同名方法,子类该听谁的”的问题)
  • 代码更易于理解和维护

典型支持语言:Java、C#、Smalltalk

Java 示例(伪代码):

class 动物 { 年龄 吃() { 吃东西 } } class 狗 extends 动物 { // 单继承:狗只有一个父类 看家() { ... } }

注意:Java 中一个类只能继承一个父类,但可以通过实现多个接口来弥补多重继承的功能需求。

4️⃣ 多重继承(Multiple Inheritance)

定义:一个子类可以有多个直接父类。

特点

  • 可以组合多个父类的功能,复用性更强
  • 但会出现菱形问题(Diamond Problem)——当两个父类有同名方法时,子类不知道该继承谁的
  • 类层次结构更复杂,容易出现冲突和混淆

典型支持语言:C++(支持)、Python(支持)

菱形问题示例

A / \ B C (B和C都重写了A的某方法) \ / D (D同时继承B和C,到底该用B的方法还是C的方法?)

C++ 的解决方案:通过虚继承(Virtual Inheritance)来解决菱形问题,但这使得语言更复杂,也更容易出错。

软考高频对比

对比项单继承多重继承
结构复杂度简单清晰复杂,可能出现菱形问题
功能复用只能从一个父类继承可以从多个父类继承功能
命名冲突无冲突可能出现同名方法冲突
典型语言Java、C#、SmalltalkC++、Python

5️⃣ 继承中的方法覆盖(Override)与super

子类可以重写(覆盖)父类的方法,用自己的实现替换父类的实现。

  • 覆盖:子类重新定义父类中已有的方法,方法名、参数列表、返回值类型必须相同
  • super:在子类中调用父类的方法或构造器(即使用户覆盖了父类方法,仍然可以通过super访问父类版本)

软考常考点覆盖的方法不能比父类方法拥有更严格的访问权限(如父类是public,子类不能是private)。这是子类可以安全替代父类的保证。

6️⃣ 继承的优缺点(软考常考)

优点缺点
代码复用,减少重复父类改动会影响所有子类(脆弱基类问题
建立类之间的层次关系,符合现实世界认知过度使用继承会导致类层次过深,难以理解
支持多态(下一篇细讲)继承破坏了封装(子类可以访问父类的protected成员)

一个设计原则优先使用组合(Composition),而不是继承(Inheritance)。组合更灵活,不会破坏封装。如果只是为了复用代码而不是表达“is-a”关系,用组合更合适。

7️⃣ 经典例题

例题1:以下关于 Java 语言中继承的描述,正确的是( )。

A. Java 支持多重继承,一个类可以有多个父类
B. Java 不支持继承,所有类都是独立的
C. Java 只支持单继承,但一个类可以实现多个接口
D. Java 中所有类默认继承自 Object 类,因此不支持单继承

解析:Java 是单继承(一个类只能有一个父类),但可以通过实现多个接口来获得多重继承的功能。选C


例题2:在面向对象系统中,子类可以继承父类的属性和方法。以下关于继承的叙述中,正确的是( )。

A. 继承关系表示“has-a”关系
B. 子类可以继承父类的所有成员,包括私有成员
C. 方法覆盖时,子类方法的访问权限可以比父类更严格
D. 继承体现了“is-a”关系

解析:A错误——继承是“is-a”,组合才是“has-a”;B错误——私有成员不能被继承;C错误——覆盖时不能有更严格的访问权限。D正确。选D

8️⃣ 记忆口诀

继承就是 IS-A,子类复用父类码。
单继 Java 多继 C++,菱形问题是多继的坑。
多用组合少继承,设计灵活不僵硬。

9️⃣ 小测验(评论区对答案)

以下关于继承的叙述中,错误的是( )。
A. 子类可以继承父类的 public 和 protected 成员
B. 子类可以重写(覆盖)父类的方法
C. 多重继承一定会导致菱形问题
D. 继承关系表示“is-a”关系

🔔本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #继承 #单继承 #多重继承 #面向对象 #软考备考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/29 2:13:30

外卖也能点3D打印机了?我试了美团淘宝京东

外卖小哥敲开门,递给我一台3D打印机。这画面,只要下单,就能有。昨天晚上在美团点外卖,心血来潮在搜索框里敲了“3D打印机”五个字。本来没抱什么期待,结果页面刷新出来的那一刻,我愣了一下——深圳南山区&a…

作者头像 李华
网站建设 2026/7/29 2:13:10

GPT-Live 4D阅读体验:基于RAG的智能文档交互系统构建指南

最近在技术圈里,GPT-Live 和 4D 阅读体验这两个词频繁出现,很多开发者都在讨论如何将 AI 能力更自然地融入日常开发和学习流程中。传统的文档阅读和代码理解往往停留在静态层面,而 GPT-Live 提出的 4D 阅读概念,试图通过实时交互、…

作者头像 李华
网站建设 2026/7/29 2:12:33

Codex与ChatGPT代码生成实战:从环境配置到项目集成

Codex作为OpenAI推出的代码生成模型,结合ChatGPT的对话能力,为开发者提供了全新的编程辅助体验。这次我们重点看如何在实际开发中部署和使用这套工具链,特别是环境配置、核心功能调用以及项目实战中的具体技巧。最值得关注的是Codex能够根据自…

作者头像 李华
网站建设 2026/7/29 2:05:52

腾讯机器人X团队打造“会思考也会想象“的机器人大脑——RxBrain

这项由腾讯机器人X团队、富田实验室与腾讯混元团队联合发布的研究,于2026年7月15日以预印本形式公开,论文编号为arXiv:2607.14187。感兴趣的读者可以通过该编号在arXiv平台查阅完整论文。**研究概要**教一个机器人完成任务,远比教一个孩子学骑…

作者头像 李华
网站建设 2026/7/29 2:05:32

001文件怎样解压?分卷压缩包完整解压指南

处理分卷压缩包时,001 文件常常让人困惑。它通常是分卷压缩包的一部分,需要和其他分卷配合才能正常解压。本文将详细介绍 001 文件的本质、常见场景以及正确的解压方法,帮助你高效处理这类文件。 文章目录001文件是什么001为什么常见于分卷压…

作者头像 李华
网站建设 2026/7/29 2:04:24

力扣389题解析:字符串差异检测的三种算法

1. 问题背景与核心需求力扣389题"找不同"是一道经典的字符串处理题目,题目描述如下:给定两个字符串s和t,其中t是由s中的字符随机重排后,再在随机位置添加一个字符得到。要求找出t中被添加的那个字符。这道题看似简单&am…

作者头像 李华