news 2026/4/16 18:09:00

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/16 7:15:36

VibeThinker-1.5B代码生成能力实测:LiveCodeBench v6表现分析

VibeThinker-1.5B代码生成能力实测:LiveCodeBench v6表现分析 1. 小参数大潜力:VibeThinker-1.5B为何值得关注 你有没有想过,一个只有15亿参数的模型,也能在编程和数学推理上打出高光表现?这不是未来设想&#xff0c…

作者头像 李华
网站建设 2026/4/16 14:29:31

ConvertX:一站式自托管在线文件转换平台,支持上千种格式

你是否曾经为了转换一个文件格式,在电脑上安装各种臃肿的软件,或者将敏感文件上传到第三方在线转换网站?如果你正在寻找一个既能保护隐私、又能满足多样化转换需求的自托管解决方案,那么 ConvertX 就是为你量身打造的工具。 &…

作者头像 李华
网站建设 2026/4/16 14:29:25

如何通过读文献寻找科研思路?

作为一名研究生,当你踏入实验室的那一刻,最常面临的焦虑往往不是实验做不出来,而是根本不知道该做什么实验。导师给的方向太宽泛,师兄师姐的建议太碎片化,面对浩如烟海的学术资源,你是否也曾在深夜对着电脑…

作者头像 李华
网站建设 2026/4/16 14:29:54

教育场景应用:老师卡通形象吸引学生注意

教育场景应用:老师卡通形象吸引学生注意 在日常教学中,你有没有遇到过这样的情况:刚上课时学生眼神发散、注意力不集中,讲到重点时后排同学低头刷手机,互动提问环节只有前排三两个人举手?这并不是学生不认…

作者头像 李华
网站建设 2026/4/15 17:16:26

顾客买完就走?如何打造“回头客”制造机?

获取新客的成本是留住老客的5倍以上!但很多店铺与顾客的关系止步于“交易完成”。端点(陕西)科技有限公司的电商智能体,是你专属的“客户关系智能引擎”,它致力于将一次性的买家,转客户关系维护的缺失智能体…

作者头像 李华