news 2026/1/26 17:22:03

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/1/25 12:20:31

PyTorch镜像适合教学?高校课程环境批量部署案例

PyTorch镜像适合教学?高校课程环境批量部署案例 1. 引言:为什么高校AI课程需要统一开发环境? 在高校开设深度学习、人工智能相关课程时,一个常见但棘手的问题是:学生本地环境五花八门,配置过程耗时耗力&a…

作者头像 李华
网站建设 2026/1/25 23:25:24

如何教育用户正确使用GPEN?引导文案设计心理学

如何教育用户正确使用GPEN?引导文案设计心理学 1. 为什么用户总调不好参数?从“不会用”到“用得好”的认知跨越 你有没有遇到过这样的情况:把GPEN部署好,界面也打开了,图片也上传了,可点下“开始增强”后…

作者头像 李华
网站建设 2026/1/26 17:17:49

隔离防浪涌,让压流采集模块轻松应对工业复杂工况

工业级电参数采集模块是工业电力数字化、智能化的核心感知硬件,其应用场景覆盖工业生产全链路、能源供给与消耗、特殊工业环境等核心领域,核心围绕电力监测、计量计费、故障报警、能耗管理、设备联动五大需求展开,且所有场景均适配工业现场的…

作者头像 李华
网站建设 2026/1/26 9:16:43

Qwen3-1.7B部署常见问题全解,省心省力

Qwen3-1.7B部署常见问题全解,省心省力 你是不是也遇到过:镜像启动了,代码写好了,但调用模型时却卡在连接失败、参数错误或返回异常?别急,这几乎是每个刚上手Qwen3-1.7B的朋友都会踩的坑。本文不讲理论&…

作者头像 李华
网站建设 2026/1/26 2:55:56

Hunyuan-MT-7B GPU利用率低?算力适配优化实战案例

Hunyuan-MT-7B GPU利用率低?算力适配优化实战案例 在部署腾讯混元开源的Hunyuan-MT-7B-WEBUI镜像后,不少用户反馈:虽然模型推理功能正常,但GPU利用率长期处于30%以下,显存占用高却算力未被充分调用。这不仅造成硬件资…

作者头像 李华
网站建设 2026/1/25 9:52:25

Fun-ASR批量处理技巧,一次搞定上百个音频文件

Fun-ASR批量处理技巧,一次搞定上百个音频文件 你是否曾面对几十甚至上百个会议录音、培训音频或客户通话记录,一个一个上传识别,等得焦头烂额? 手动操作不仅耗时,还容易出错。而更糟的是——你以为只是“用一下工具”…

作者头像 李华