Java笔记:面向对象继承、this与super关键字详解

发布时间:2026/10/17 18:23:32

Java笔记:面向对象继承、this与super关键字详解 一、继承概述继承是面向对象编程的三大特性之一封装、继承、多态。它允许我们基于一个已有的类父类/超类来创建一个新的类子类/派生类。子类会自动拥有父类的属性和方法同时可以定义自己特有的属性和方法或者重写父类的方法以满足新的需求。1.1 继承的作用与好处代码复用子类可以直接使用父类中已定义好的属性和方法无需重复编写。提高可维护性公共逻辑集中在父类修改时只需改动一处。建立类之间的层次关系使得代码结构更清晰更符合现实世界的逻辑如“学生”是一种“人”。1.2 继承的语法在Java中使用extends关键字来实现继承。// 父类classAnimal{Stringname;publicvoideat(){System.out.println(name正在吃东西);}}// 子类继承父类classDogextendsAnimal{publicvoidbark(){System.out.println(name汪汪叫);}}在上面的例子中Dog类通过extends Animal继承了Animal类的name属性和eat()方法。因此Dog对象可以直接使用这些成员。二、this 关键字详解this关键字代表当前对象的引用。它可以在类的实例方法或构造器中使用。2.1 this 的主要用途1. 区分成员变量与局部变量当方法的形参或局部变量与类的成员变量同名时使用this.变量名来明确指代成员变量。classPerson{privateStringname;// 成员变量publicvoidsetName(Stringname){// 局部变量形参this.namename;// 将局部变量name的值赋给成员变量this.name}publicStringgetName(){returnthis.name;// 返回当前对象的name属性}}2. 在构造器中调用其他构造器在一个构造器内部可以使用this(参数列表)来调用本类的另一个构造器。此调用必须是构造器内的第一条语句。classStudent{privateStringname;privateintage;publicStudent(){this(未知,0);// 调用本类的双参构造器}publicStudent(Stringname,intage){this.namename;this.ageage;}}3. 作为方法的返回值有时需要返回当前对象本身以支持链式调用。classCalculator{privateintvalue;publicCalculatoradd(intnum){this.valuenum;returnthis;// 返回当前Calculator对象}publicintgetValue(){returnvalue;}}// 链式调用CalculatorcalcnewCalculator();intresultcalc.add(5).add(10).getValue();// result 15三、super 关键字详解super关键字代表对父类对象的引用。它用于在子类中访问父类的成员属性、方法、构造器。3.1 super 的主要用途1. 访问父类的成员变量和方法当子类重写了父类的方法或隐藏了父类的成员变量时可以使用super.成员名来明确调用父类的版本。classAnimal{Stringtype动物;publicvoidsound(){System.out.println(动物发出声音);}}classCatextendsAnimal{Stringtype猫科动物;// 隐藏了父类的type变量Overridepublicvoidsound(){super.sound();// 调用父类的sound方法System.out.println(并且喵喵叫);}publicvoidprintType(){System.out.println(子类type: type);// 输出猫科动物System.out.println(父类type: super.type);// 输出动物}}2. 调用父类的构造器在子类的构造器中可以使用super(参数列表)来调用父类的构造器。此调用必须是子类构造器内的第一条语句。如果子类构造器没有显式调用super(...)或this(...)编译器会自动加上super()调用父类的无参构造器。classVehicle{privateStringbrand;publicVehicle(Stringbrand){this.brandbrand;System.out.println(Vehicle构造器被调用品牌brand);}}classCarextendsVehicle{privateintseats;publicCar(Stringbrand,intseats){super(brand);// 必须放在第一行调用父类有参构造器this.seatsseats;System.out.println(Car构造器被调用座位数seats);}}3.2 this 与 super 的对比特性thissuper指向对象当前类实例对象本身父类实例在子类对象中主要用途1访问本类的成员变量、方法访问父类的成员变量、方法主要用途2在本类构造器中调用其他构造器在子类构造器中调用父类构造器调用位置必须放在构造器第一行this(...)必须放在构造器第一行super(...)是否可同时存在在同一个构造器中this(...)和super(...)不能同时出现四、继承中的方法重写Override方法重写是子类对父类中允许访问的方法的实现过程进行重新编写。重写是实现多态的关键。4.1 重写的规则方法名、参数列表必须完全相同。返回类型在Java 5及以后子类重写方法的返回类型可以是父类方法返回类型的子类协变返回类型。访问权限子类方法的访问权限不能比父类方法更严格例如父类是protected子类可以是public或protected但不能是private。异常子类方法抛出的异常不能比父类方法抛出的异常更宽泛。被final、static、private修饰的方法不能被重写。4.2 Override 注解建议在重写方法上添加Override注解。这可以让编译器帮助检查该方法是否正确地重写了父类方法避免因拼写错误等原因导致意外的新方法定义。classParent{publicvoidshow(){System.out.println(Parent show);}}classChildextendsParent{Override// 加上注解编译器会检查publicvoidshow(){super.show();// 可选先调用父类逻辑System.out.println(Child show);}}五、综合示例与总结下面通过一个综合示例来巩固理解// 父类classEmployee{privateStringname;privatedoublesalary;publicEmployee(Stringname,doublesalary){this.namename;this.salarysalary;}publicvoidwork(){System.out.println(name正在工作);}publicfinalvoidgetPaid(){// final方法子类不能重写System.out.println(name领取薪水salary);}}// 子类classManagerextendsEmployee{privatedoublebonus;publicManager(Stringname,doublesalary,doublebonus){super(name,salary);// 调用父类构造器初始化name和salarythis.bonusbonus;}Overridepublicvoidwork(){super.work();// 调用父类的work方法System.out.println(并且正在管理团队);}// 不能重写 getPaid() 方法因为它是final的// 但可以新增方法publicvoidholdMeeting(){System.out.println(经理正在主持会议);}}publicclassMain{publicstaticvoidmain(String[]args){ManagermgrnewManager(张三,15000,5000);mgr.work();// 输出张三正在工作 并且正在管理团队mgr.getPaid();// 输出张三领取薪水15000.0mgr.holdMeeting();// 输出经理正在主持会议}}关键总结继承 (extends)建立“is-a”关系实现代码复用和层次化设计。this指代当前对象用于区分同名变量、调用本类构造器、支持链式调用。super指代父类对象用于访问被隐藏的父类成员、调用父类构造器。方法重写 (Override)子类重新定义父类方法的行为是实现运行时多态的基础。构造器调用链子类构造器必须直接或间接调用父类构造器且super(...)或this(...)必须位于第一行。掌握继承、this和super是理解Java面向对象编程的核心也是学习多态、抽象类、接口等高级特性的重要基础。
延伸阅读

更多相关文章

2026/10/17 7:50:21

C# GRR 测量系统分析:3步实现计量型数据重复性与再现性计算

C#实现GRR测量系统分析:从理论到工业级代码实践在制造业和质量控制领域,测量系统分析(MSA)是确保数据可靠性的基石。GRR(量具重复性与再现性)作为MSA的核心指标,直接关系到生产决策的准确性。本…

2026/10/17 16:29:28

担心源码外传?2026 盘点 6 款源代码防泄密软件,中小企业刚需

不少中小企业遭遇员工带走源码造成巨大损失,很多管理者担心源码外传 特意整理 2026 盘点 6 款源代码防泄密软件 这些源代码防泄密软件适配中小团队,操作简单 是企业守住开发成果必不可少的工具。 一、安秉源代码加密软件 1、源码文件透明加密&#x…

2026/10/15 20:27:37

TS2007FC与PIC32MX664H音频系统设计与优化

1. TS2007FC与PIC32MX664F064L的黄金组合解析在音频处理领域,硬件选型往往决定了系统的最终表现上限。TS2007FC这颗3W无滤波D类音频功率放大器,与PIC32MX664F064L这款MIPS内核微控制器的组合,堪称嵌入式音频系统的"黄金搭档"。我曾…

2026/10/17 18:20:53

STM32F107裸机实现IEEE 1588 PTP精确时间同步方案解析

简介:基于STM32F107微控制器的PTP IEEE1588V2时钟同步实现资料,面向嵌入式开发者和工业自动化、电力系统等需要高精度时间同步的应用场景。资源包含硬件评估板固件、用户手册、烧录指南以及LwIP协议栈集成的PTP源码工程,可帮助开发者从零搭建…

2026/10/17 18:20:53

快慢指针原理与工程实践:从环检测到内存受限场景优化

1. 快慢指针不是“两个for循环的懒人替代品”,而是空间换时间的精密节拍器快慢指针(Fast-Slow Pointer)这个词,最近在某高校算法实训课的讨论区里被反复提起——但多数学生一听到就下意识皱眉,觉得是“又要背模板”。我…

2026/10/16 5:33:43

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/16 4:03:48

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/17 14:20:58

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/17 0:04:32

PlanarSLAM:面向曼哈顿世界的点线面联合SLAM系统

简介:本资源是面向机器人视觉与SLAM研究者的C开源RGB-D SLAM系统实现,专为结构化室内场景(如办公室、走廊)设计,通过融合点、线、平面三类几何特征并引入“曼哈顿世界”假设,显著提升位姿跟踪鲁棒性与稠密地…

2026/10/17 0:04:32

TDH Workflow调度实战:从DAG依赖驱动到任务编排与故障排查

1. 从一个调度脚本说起:TDH Workflow到底在解决什么问题第一次接触TDH的Workflow,是在一个数据清洗项目里。当时团队每天要跑几十个ETL任务,任务之间有严格的先后依赖——A表清洗完才能跑B表的关联,B表跑完才能触发C表的聚合。最开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑