news 2026/2/26 9:17:25

Java基础笔记(继承)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java基础笔记(继承)

一、Java 继承的核心价值与基础概念

1. 继承的本质:复用与扩展

继承的核心思想是 “子类继承父类”,即子类(Subclass)通过extends关键字,获得父类(Superclass)的属性和行为(方法),同时可在子类中新增专属属性或重写父类方法,实现功能扩展。这种设计既减少了代码冗余,又让类之间形成清晰的层级关系,便于维护和扩展。

2. Java 的单继承特性

与部分编程语言支持多继承不同,Java 明确规定类只能单继承(一个子类只能有一个直接父类)。这一限制是为了避免多继承带来的 “菱形问题”(多个父类存在同名方法时的歧义),保证代码逻辑的简洁性。若需实现类似多继承的功能,可通过接口组合来弥补。

3. 继承的语法与层次结构

  • 基础语法:class 子类名 extends 父类名 {}
  • 继承层次:父类可再继承其他类,形成 “祖父类→父类→子类” 的层级结构,子类能访问父类及祖先类中允许访问的成员(受访问修饰符限制)。

二、继承的底层逻辑:对象创建与内存存储

1. 子类对象创建:父类优先初始化

课程重点强调:创建子类对象时,父类对象会先于子类对象创建。底层流程如下:

  1. 调用子类构造方法时,会隐式调用父类的无参构造方法(若父类无无参构造,需通过super()显式调用父类有参构造);
  2. 父类完成属性初始化和构造方法执行后,子类才会初始化自身属性并执行构造逻辑;
  3. 本质是 “先初始化父类成员,再初始化子类成员”,确保子类能正常复用父类的资源。

2. 继承中的内存存储机制

继承在内存中的核心逻辑是 “共享与独立并存”:

  • 父类的属性和方法会被所有子类对象共享,存储在方法区的类信息中;
  • 每个子类对象仅存储自身新增的属性(父类属性不会重复存储),调用父类方法时,通过类信息找到对应的方法执行;
  • 这种设计既节省内存空间,又保证了子类对象对父类资源的复用。

三、继承的核心语法:方法重写与方法重载

继承中最易混淆也最常用的两个概念的是方法重写(Override)方法重载(Overload),二者本质、规则完全不同,需精准区分。

1. 方法重写(Override):改写父类行为

  • 定义:子类中定义与父类方法名、参数列表、返回值类型完全一致的方法,用于改写父类方法的实现逻辑。
  • 核心规则:
    1. 访问修饰符:子类重写方法的访问权限不能低于父类(如父类是protected,子类可改为public,但不能改为private);
    2. 不能重写父类的final方法(final修饰的方法不可被修改);
    3. 重写方法需与父类方法的核心签名(方法名 + 参数列表)完全匹配。
  • 应用场景:子类需要沿用父类方法名称,但实现逻辑与父类不同(如动物类的move()方法,子类鸟的move()实现 “飞行”,子类狗的move()实现 “奔跑”)。

2. 方法重载(Overload):同一类中多态表现

  • 定义:在同一个类中,定义多个方法名相同、参数列表不同的方法(参数个数、类型或顺序不同),与返回值类型无关。
  • 核心规则:
    1. 方法名必须一致;
    2. 参数列表必须不同(核心区分依据);
    3. 可与继承结合(子类可重载父类方法,也可重载自身方法)。
  • 应用场景:同一功能有多种参数输入方式,需简化方法命名(如println()方法,支持intStringboolean等多种参数类型)。

3. 重写与重载的核心区别

对比维度方法重写(Override)方法重载(Overload)
存在范围子类与父类之间同一个类中
核心条件方法名、参数列表、返回值一致方法名相同,参数列表不同
访问修饰符子类权限≥父类权限无严格限制
与继承关系依赖继承可独立存在,也可结合继承

四、继承中的关键关键字:super 与 this

1. super 关键字:访问父类资源

super的核心作用是在子类中访问父类的成员,避免子类与父类成员命名冲突:

  • 调用父类构造方法:super(参数),必须放在子类构造方法的第一行;
  • 访问父类属性:super.父类属性名(当子类有同名属性时使用);
  • 调用父类方法:super.父类方法名(参数)(当子类重写了父类方法,仍需调用父类原方法时使用)。

2. this 关键字:指代当前对象

在继承场景中,this的作用主要是:

  • 区分当前对象的属性与局部变量(如this.name = name);
  • 调用当前类的其他构造方法(this(参数));
  • 明确指代当前对象,避免与父类成员混淆(如this.method()表示调用子类自身的方法,而非父类方法)。

五、继承的延伸:与抽象类、接口的关联

继承并非孤立存在,它与抽象类、接口的配合是 Java 实现多态和灵活设计的关键:

  • 抽象类:作为继承体系的 “模板类”,定义子类必须实现的抽象方法(通过abstract关键字),强制子类遵循统一的行为规范,同时可包含非抽象方法供子类复用;
  • 接口:弥补 Java 单继承的局限,一个类可实现多个接口(implements关键字),接口中定义的抽象方法(Java 8 + 后支持默认方法)需实现类全部实现,常用于定义 “行为规范”(如Runnable接口的run()方法)。

六、继承中的常见问题与注意事项

  1. 子类访问父类成员的限制:子类不能直接调用父类的私有(private)变量和方法,需通过父类提供的publicprotectedgetter/setter 方法访问;
  2. 构造方法的使用规则:父类若没有无参构造,子类必须通过super(参数)显式调用父类的有参构造,否则编译报错;
  3. 全局变量与局部变量冲突:继承中若子类与父类有同名全局变量,子类访问时默认优先使用自身变量,需通过super访问父类变量;
  4. 避免继承滥用:并非所有类都适合作为父类,若类之间没有明确的 “is-a” 关系(如 “狗是动物”),强行使用继承会导致类体系混乱,此时可考虑组合(“has-a” 关系)替代。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/25 13:12:23

利用Qwen3-VL-8B增强Dify智能体平台的图像理解能力

利用Qwen3-VL-8B增强Dify智能体平台的图像理解能力 在今天,用户已经不再满足于只能“听文字”的AI助手。当你把一张商品图发给客服机器人,它却回答“我看不懂图片”,这种体验显然难以令人接受。现实世界是多模态的——我们说话时配表情、写笔…

作者头像 李华
网站建设 2026/2/25 2:39:20

3个必知技巧:彻底解决Tiled编辑器地图重复加载难题

掌握游戏地图优化方法,让Tiled编辑器性能飞升的完整指南 【免费下载链接】tiled Flexible level editor 项目地址: https://gitcode.com/gh_mirrors/ti/tiled 作为一名游戏开发者,你是否曾在使用Tiled编辑器时遭遇地图重复加载的困扰?…

作者头像 李华
网站建设 2026/2/24 16:27:53

Mysql 8.0+ 的递归查询WITH RECURSIVE

MySQL with Recursive是一种基于递归思想的MySQL查询方式,可以实现对数据的递归查询和处理,返回符合条件的数据,在MySQL 8.0版本中,该功能被正式引入。这种递归查询方式用于单表自关联,可以应用在很多场景下&#xff0…

作者头像 李华
网站建设 2026/2/21 21:42:18

C++ 结构体(struct)【1】

C/C 数组允许定义可存储相同类型数据项的变量,但是结构是 C 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性&#x…

作者头像 李华
网站建设 2026/2/25 19:16:03

gpt-oss-20b在低资源环境下的性能调优技巧

gpt-oss-20b在低资源环境下的性能调优技巧 在大模型如GPT-4等闭源系统主导云端AI服务的当下,一个现实问题日益凸显:普通开发者、中小企业甚至科研团队难以负担高昂的算力成本和数据隐私风险。尽管这些顶级模型能力强大,但它们往往依赖A100级别…

作者头像 李华
网站建设 2026/2/20 20:10:16

记力扣557.反转字符串中的单词 练习理解

给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入:s "Lets take LeetCode contest" 输出:"steL ekat edoCteeL tsetnoc"示例 2:输入&#…

作者头像 李华