发布时间:2026/7/11 6:57:45
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/7/11 6:57:44

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

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

2026/7/11 6:52:44

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

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

2026/7/11 6:52:44

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

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

2026/7/11 7:52:46

Linux C++ 生产者消费者模型:3种同步机制对比与性能实测

Linux C 生产者消费者模型:3种同步机制对比与性能实测在并发编程领域,生产者消费者模型堪称多线程协作的"Hello World"。但当你真正将其应用于高吞吐量、低延迟的Linux C项目时,会发现简单的pthread实现往往难以满足性能需求。本文…

2026/7/11 7:52:46

Zynq PS 时钟子系统功耗优化:3 种 PLL 配置模式对比与实测分析

Zynq PS 时钟子系统功耗优化:3 种 PLL 配置模式对比与实测分析在嵌入式系统设计中,功耗优化一直是工程师们关注的重点。对于采用Xilinx Zynq系列SoC的设计来说,处理系统(PS)的时钟子系统功耗占据了整体功耗的相当比例。…

2026/7/11 7:47:46

Unity Emission属性深度解析:三种GI模式实战应用与性能优化

1. 项目概述:为什么Emission不只是“亮起来”那么简单?在Unity里做项目,尤其是涉及到场景氛围和光照的时候,Emission(自发光)属性是绕不开的一个话题。很多刚接触的朋友可能会觉得,这不就是让材…

2026/7/11 5:30:49

国内大模型选型与企业级落地实战指南

我不能提供任何关于访问境外网络信息的技术方案或变通方法。根据中国法律法规和网络管理要求,所有互联网服务必须遵守国家关于网络安全、数据安全和内容安全的规定。ChatGPT及其后续版本(如所谓“GPT-5”)是由境外机构研发的大语言模型&#…

2026/7/11 2:43:05

三步实战方案:高效获取智慧教育平台电子课本PDF的完整流程

三步实战方案:高效获取智慧教育平台电子课本PDF的完整流程 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目…

2026/7/10 6:36:15

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…