news 2026/4/23 12:36:20

java基础-继承和多态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java基础-继承和多态

一.继承的概念理解

继承其实就是一个类开头定义的时候写extends 另一个类 就可以用另一个类里的方法

这样就能方便将同一个属性/类似方法整合到一个父类里,方便子类使用


继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能。

二.继承的语法

①最简单的继承语法:

修饰符 class 子类名 extends 父类名{
...
}

②简单运用:

③父类成员访问

刚刚你会发现我们没有在Dog类里定义name和age,因为父类已经定义过了,你可以理解为父类的代码在子类中自动存在。

那么怎么访问?

我们一般都常用写一个方法去定义(在子类Dog中)

如果访问的成员变量子类中有,优先访问自己的成员变量。
如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。
如果访问的成员变量与父类中成员变量同名,则优先访问自己的。

④子类中访问父类的成员方法

1)成员方法没有同名时,在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错

2)成员方法名字相同:只能通过前面的方法重载来选择调用子类的or父类的方法

⑤super关键字

刚刚提到了如果有子类父类的成员变量同名,那优先访问自己的,那么怎么访问父类的?这时候就要用到 suepr.名字

super关键字主要作用:在子类方法中访问父类的成员

这里就跟this基本一样的语法,只是从访问该类变成访问继承的父类中的变量了

不过这里的继承有限制,不能直接用super.修改,但是在子类方法中就可以用super.来修改和输出

(虽然这里不用super也一样,因为没有同名)

方法也是能super的

【注意事项】
1. 只能在非静态方法中使用
2. 在子类方法中,访问父类的成员变量和方法。

⑥子类的构造方法

子类构造方法的核心作用是:调用父类的构造方法,完成父类成员的初始化

子类构造方法可以自由选择调用父类的任意构造方法(无参 / 有参),唯一要求是 “必须在第一行通过 super () 调用父类某个构造方法↓

首先图片里的父类Animal的无参构造和有参构造就跟前面学方法的一样

但是到了子类,想调用父类的无参构造就需要写super() (不写无参构造编译器也会自动生成无参构造),想调用有参构造,那就要输入数值,所以在有参构造方法里按照父类的有参构造写类型,然后super(对应父类有参构造的类型1,类型2) ,相当于传入

注:子类构造中super(...)里的参数,必须和你要调用的那个父类构造方法的参数「类型、个数、顺序」完全匹配

有参构造↓

三.继承方式

记住只能一个继承另一个,不能一个继承多个,但是可以多层一对一继承

可以多个继承同一个

四.final关键字

final关键可以用来修饰变量、成员方法以及类

简单说就是:

final修饰的变量不能再修改,修改就会出错

final修饰的类不能被继承(就是不能当父类)

五.多态

①多态的概念:就是多种形态,就是去完成某个行为,当不同的对象去完成时会产生出不同的结果/状态

其实就是为了适应不同情况下的对象,来重写方法内容

②多台的实现条件(缺一不可):
1. 必须在继承体系下
2. 子类必须要对父类中方法进行重写
3. 通过父类的引用调用重写的方法

为了按狗的要求来写,那就在一模一样的方法定义,然后修改方法里的内容,这个就叫重写

重写的核心要求是 “方法签名完全一致”,而方法签名包含「方法名 + 参数列表(个数、类型、顺序)」

③重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

【方法重写的规则】
·子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致


·被重写的方法返回值类型可以不同,但是必须是具有父子关系的

·访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected

·父类被static、private修饰的方法、构造方法都不能被重写。


·重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写.

六.向上转型和向下转型

①向上转型:实际就是创建一个子类对象,将其当成父类对象来使用。
语法格式:父类类型 对象名 = new 子类类型()/父类类型 对象名=子类名(先前已经实例化了)

向上转型的作用:

(1) 直接赋值:子类对象赋值给父类对象,就是上图

(2) 作返回值:想对于所有继承Animal的子类写一个方法,那么这个方法的返回类型就用Animal

(3) 方法传参:写在方法定义的时候()中,就可以所有传入所有继承这个父类的子类(直接子类/间接子类)

向上转型的优点:让代码实现更简单灵活。
向上转型的缺陷:不能调用到子类特有的方法

②向下转型:将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的方法,此时:将父类引用再还原为子类对象即可,即向下转换

语法格式:原子类实例对象名=(子类对象类型)父类实例对象名

向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。Java中为了提高向下转型的安全性,引入了 instanceof ,如果该表达式为true,则可以安全转换

if(animal instanceof Dog){
dog= (Dog)animal;
dog.bark(); //子类狗的专有方法bark()
}

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

Paraformer-large二次开发指南:自定义界面与功能扩展教程

Paraformer-large二次开发指南:自定义界面与功能扩展教程 1. 快速上手与核心功能解析 你是不是已经用过Paraformer-large语音识别镜像,但觉得默认的Gradio界面不够贴合你的业务需求?或者你想给它加个日志导出、批量处理、多语种切换的功能&…

作者头像 李华
网站建设 2026/4/23 2:27:26

TC397 AUTOSAR EB MCAL STM 配置与ADS测试

文章目录前言MCAL STM硬件连接软件环境EB配置ResourceMMcuStmIrqMcal Stm 拷贝App代码IrqStmcore0_mainTask代码前言 TC397 的 EB Mcal 配置与测试, 有DIO STM UART CAN FlsLoader CRC, 本篇是 MCAL STM, 照本文描述可复现工程, 故不再提供源码, 嵌入式_机器人_自动驾驶交流QQ…

作者头像 李华
网站建设 2026/4/23 11:34:08

Qwen-Image-2512和Stable Diffusion对比,谁更适合中文

Qwen-Image-2512和Stable Diffusion对比,谁更适合中文 1. 引言:中文生成的长期痛点,终于有解了 你有没有试过用Stable Diffusion写一句“春风又绿江南岸”,结果图里冒出一堆乱码、拼音、或者干脆是英文单词拼凑的假汉字&#xff1…

作者头像 李华
网站建设 2026/4/23 11:08:37

Open-AutoGLM适合新手吗?零基础部署实战入门必看

Open-AutoGLM适合新手吗?零基础部署实战入门必看 Open-AutoGLM – 智谱开源的手机端AI Agent框架,正悄然改变我们与移动设备的交互方式。它不是简单的自动化脚本工具,而是一个真正能“看懂屏幕、听懂指令、自动操作”的智能体。对于刚接触AI…

作者头像 李华
网站建设 2026/4/15 15:01:39

从0到1体验CAM++:中文语音比对系统的快速上手机械化流程

从0到1体验CAM:中文语音比对系统的快速上手机械化流程 你有没有试过,想确认一段录音是不是某个人说的,却只能靠耳朵反复听? 声音相似、语调接近,但总觉得哪里不对劲——可又说不出个所以然。 现在,有个工…

作者头像 李华
网站建设 2026/4/19 19:04:22

新手也能懂的YOLOv13:官方镜像保姆级入门教程

新手也能懂的YOLOv13:官方镜像保姆级入门教程 你是不是也曾经被目标检测模型复杂的环境配置劝退?下载依赖、编译源码、调试报错……光是准备阶段就能耗掉一整天。今天,我们来彻底告别这些烦恼。 现在有一款 YOLOv13 官版镜像,已…

作者头像 李华