[Java]继承和多态1——继承的概念和访问

[Java]继承和多态1——继承的概念和访问
画师:竹取工坊
大佬们好!我是Mem0rin!现在正在准备自学转码。
如果我的文章对你有帮助的话,欢迎关注我的主页Mem0rin,欢迎互三,一起进步!

文章目录

一、什么是继承

在代码的编写中,当类的部分内容高度重合的时候,重复的书写会显得臃肿,例如,对于老师和学生的体测成绩,重合的指标有身高,体重,年龄,老师有学工号,学生有学号和年级,那么学生的类可以按照如下方式定义:

publicclassStudent{publicint age;publicdouble weight;publicdouble height;publicString name;publicString studentID;publicint grade;}

老师则按照以下方式定义:

publicclassTeacher{publicint age;publicdouble weight;publicdouble height;publicString name;publicString employeeID;}

但这样我们发现,age,weight,height,name的字段是重复的,因此我们想到能不能提取出来这两个类的普遍特征,提取成一个全新的类,并且让老师和学生这两个类都能够使用这个类的特征。
这种提取共性,实现代码复用的手段在Java中通过“继承”来实现,具体实现为:创建一个新的类,这个类承载原有类的共性,然后在原来的类中用extends继承属性。我们把被继承的类成为父类,继承的类成为子类
代码如下:

publicclassPerson{publicint age;publicdouble weight;publicdouble height;publicString name;}publicclassStudentextendsPerson{publicString studentID;publicint grade;}publicclassTeacherextendsPerson{publicString employeeID;}

这样就简洁多了。
“继承”的作用就体现出来了:提取共性,实现代码的复用。反过来,还可以对原有的类进行拓展,增加新功能

二、如何实现对父类的调用

(一)成员变量

1.不存在重名变量

此时父类的成员变量可以直接访问。
我们对Person类的age定义初始值为114514,并通过以下Main类运行测试。

publicclassMain{publicstaticvoidmain(String[] args){Student stu =newStudent();Teacher tea =newTeacher();System.out.println(stu.age);System.out.println(tea.age);}}/** >>> 114514 114514*/

这是可以正常运行的,此时当作这些成员变量就在子类中即可。

2.存在重名变量

如果Student类和Person类都有成员变量age,并且在Person中定义为114514,在Student中定义为18,stu.age又会输出什么结果呢?
结果是18。
我们可以得到以下规律,当在子类中访问成员时:
当子类和父类都含有该成员时,子类会优先访问自己的成员变量。
当子类没有该成员,则会访问父类,如果父类也没有则报错。

(二)成员方法

子类同样可以访问父类的方法,也分为不重名和重名两种情况:

1.不存在重名方法

直接访问即可:
我们此时对Person函数作以下修改:

publicclassPerson{publicint age =114514;publicdouble weight =42;publicdouble height =158;publicString name ="Miku";@OverridepublicStringtoString(){return"Person{"+"age="+ age +", weight="+ weight +",,+ name +'\''+'}';}}

并用Main类运行:

publicclassMain{publicstaticvoidmain(String[] args){Student stu =newStudent();Teacher tea =newTeacher();System.out.println(stu.toString());System.out.println(tea.toString());}}/**>>> Person{age=114514, weight=0.0, height=0.0, name='null'} Person{age=114514, weight=0.0, height=0.0, name='null'}*/

2.存在重名方法

我们对PersonStudentMain方法的定义如下:

publicclassPerson{publicint age =114514;publicdouble weight =42;publicdouble height =158;publicString name ="Miku";@OverridepublicStringtoString(){return"Person{"+"age="+ age +", weight="+ weight +",,+ name +'\''+'}';}publicvoidshow(int a){System.out.println(a);}}publicclassStudentextendsPerson{publicint age =18;publicString studentID;publicint grade;@OverridepublicStringtoString(){return"Student{"+"age="+ age +",+ studentID +'\''+", grade="+ grade +'}';}publicvoidshow(){System.out.println("您的学号是:"+ studentID);}}publicclassMain{publicstaticvoidmain(String[] args){Student stu =newStudent();System.out.println(stu.toString()); stu.show(); stu.show(1);}}/* >>> Student{age=18, studentID='null', grade=0} 您的学号是:null 1 */

访问成员方法的方式如下:
1.优先在子类找,找到则运行,找不到去父类找,找不到则报错。
2.若方法同名,但是函数参数列表不同,即重载,则在查找参数列表对应的函数运行。

(三)super关键字

重名情况访问父类成员

如果重名之后还是想要访问父类成员怎么办?可以用super关键字。

publicclassStudentextendsPerson{publicint age =18;publicString studentID;publicint grade;@OverridepublicStringtoString(){return"Student{"+"age="+ age +",+ studentID +'\''+", grade="+ grade +'}';}//使用super关键字访问父类重名成员publicStringmethod(){System.out.println(super.age);returnsuper.toString();}publicvoidshow(){System.out.println("您的学号是:"+ studentID);}}publicclassMain{publicstaticvoidmain(String[] args){Student stu =newStudent();System.out.println(stu.method());}}/** >>> 114514 Person{age=114514, weight=42.0, height=158.0, name='Miku'} */

但需要注意的是:
1.super关键字必须在非静态方法下使用;
2.只能在子类方法中用于访问父类成员
(换而言之在别的类中实例化对象然后stu.super.toString()是不可行的)

下一节讲继承的构造和代码块运行顺序。

Read more

零基础学AI大模型之Milvus实战:Attu可视化安装+Python整合全案例

零基础学AI大模型之Milvus实战:Attu可视化安装+Python整合全案例

大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注实战代码系列最新文章😉C++实现图书管理系统(Qt C++ GUI界面版)SpringBoot实战系列🐷【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案分库分表分库分表之实战-sharding-JDBC分库分表执行流程原理剖析消息队列深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK)AI大模型零基础学AI大模型之Milvus部署架构选型+Linux实战:Docker一键部署+WebUI使用 前情摘要 1、零基础学AI大模型之读懂AI大模型 2、零基础学AI大模型之从0到1调用大模型API 3、零基础学AI大模型之SpringAI 4、零基础学AI大模型之AI大模型常见概念 5、零基础学AI大模型之大模型私有化部署全指南 6、零基础学AI大模型之AI大模型可视化界面 7、零基础学AI大模型之LangChain 8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路 9、零基础学AI大模型之Prompt提示词工程 10、零基础

By Ne0inhk

绿色版Python(Portable Python)使用指南(Windows系统)

绿色版Python(Portable Python)使用指南(Windows系统) 2026年3月6日 一、下载绿色版Python 绿色版Python(Portable Python)即Windows嵌入式版本(Embeddable Package),是由Python官方提供的免安装、可便携使用的压缩包形式发行版。该版本无需管理员权限,解压即可运行,特别适用于U盘携带、教学演示或受限环境部署。 官方下载来源 推荐从Python官方网站获取原始嵌入包,确保安全与完整性: * 主站地址:https://www.python.org/downloads/windows/ 1,2 * FTP直链模板: CODE 复制 https://www.python.org/ftp/python/{version}/python-{version}-embed-arch.zip 📌 操作提示:访问官网后,在“Looking

By Ne0inhk
Python pytest 框架通关指南:自动化测试不再难

Python pytest 框架通关指南:自动化测试不再难

文章目录 * 一、pytest介绍 * 1.1 pytest的优点 * 1.2 主流Python接口自动化框架对比 * 二、安装 * 三、用例运行规则 * 四、pytest命令参数 * 4.1 常见参数 * 4.2 命令使用示例 * 五、pytest配置文件 * 5.1 常见配置选项 * 5.2 配置示例 * 六、前后置操作 * 6.1 setup_method 和 teardown_method * 6.2.setup_class 和 teardown_class * 七、断言 * 7.1 基本数据类型断言:

By Ne0inhk