news 2026/5/30 18:41:30

Java多态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java多态

先赞后看,养成习惯!!! ^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持下去的动力,点赞后不要忘记关注我哦

个人主页:伯明翰java
文章专栏:JavaSE
如有错误,请您指正批评 ^ _ ^

1 多态的概念

多态就是不同类的对象对同一消息做出响应。即同一个接口,使用不同实例而执行不同的操作。多态分为编译时多态(重载)和运行时多态(重写)。它使程序具有良好的灵活性和扩展性。

1.1多态实现的条件

  1. 必须在继承体系下
  2. ⼦类必须要对⽗类中⽅法进⾏重写
  3. 通过⽗类的引⽤调⽤重写的⽅法
    多态体现:在代码运⾏时,当传递不同类对象时,会调⽤对应类中的⽅法。
publicclassAnimal{Stringname;intage;publicAnimal(Stringname,intage){this.name=name;this.age=age;}publicvoideat(){System.out.println(name+"吃饭");}}publicclassCatextendsAnimal{publicCat(Stringname,intage){super(name,age);}@Overridepublicvoideat(){System.out.println(name+"吃⻥~~~");}}publicclassDogextendsAnimal{publicDog(Stringname,intage){super(name,age);}@Overridepublicvoideat(){System.out.println(name+"吃⻣头~~~");}}///////////////////////////////分割线//////////////////////////////////////////////publicclassTestAnimal{// 编译器在编译代码时,并不知道要调⽤Dog 还是 Cat 中eat的⽅法// 等程序运⾏起来后,形参a引⽤的具体对象确定后,才知道调⽤那个⽅法// 注意:此处的形参类型必须时⽗类类型才可以publicstaticvoideat(Animala){a.eat();}publicstaticvoidmain(String[]args){Catcat=newCat("元宝",2);Dogdog=newDog("⼩七",1);eat(cat);eat(dog);}}

当类的调⽤者在编写eat 这个⽅法的时候,参数类型为Animal(⽗类),此时在该⽅法内部并不知道,也不关注当前的a引⽤指向的是哪个类型(哪个⼦类)的实例.此时a这个引⽤调⽤eat⽅法可能会有多种不同的表现(和a引⽤的实例相关),这种⾏为就称为多态.

1.2 重写

写是⼦类对⽗类⾮静态、⾮private修饰,⾮final修饰,⾮构造⽅法
等的实现过程进⾏重新编写,返回值和形参都不能改变。即外壳不变,核⼼重写!重写的好处在于⼦类可以根据需要,定义特定于⾃⼰的⾏为。也就是说⼦类能够根据需要实现⽗类的⽅法。

  1. ⼦类在重写⽗类的⽅法时,⼀般必须与⽗类⽅法原型⼀致:返回值类型⽅法名 (参数列表)要完全⼀致。
  2. 被重写的⽅法返回值类型可以不同,但是必须是具有⽗⼦关系的。
  3. 访问权限不能⽐⽗类中被重写的⽅法的访问权限更低。例如:如果⽗类⽅法被public修饰,则⼦类中重写该⽅法就不能声明为protected。
  4. ⽗类被static、private修饰的⽅法、finaly修饰的方法、构造⽅法都不能被重写。
  5. 重写的⽅法,可以使⽤@Override 注解来显式指定.有了这个注解能帮我们进⾏⼀些合法性校验.例如不⼩⼼将⽅法名字拼写错了(⽐如写成aet),那么此时编译器就会发现⽗类中没有aet⽅法,就会编译报错,提⽰⽆法构成重写.

重写和重载的区别

方法重载:同一个类中可以有多个同名方法,它们具有不同的参数列表。虽然方法名相同,但可以根据传入的参数不同,编译器会在编译时确定调用哪个方法。

静态绑定:也称为前期绑定(早绑定),即在编译时,根据⽤⼾所传递实参类型就确定了具体调⽤那个⽅法。典型代表函数重载。
动态绑定:也称为后期绑定(晚绑定),即在编译时,不能确定⽅法的⾏为,需要等到程序运⾏时,才能够确定具体调⽤那个类的⽅法。

向上转型和向下转型

向上转型

向上转型:实际就是创建⼀个⼦类对象,将其当成⽗类对象来使⽤。

Animalanimal=newCat("元宝",2);

animal是⽗类类型,但可以引⽤⼀个⼦类对象,因为是从⼩范围向⼤范围的转换

publicclassTestAnimal{// 2. ⽅法传参:形参为⽗类型引⽤,可以接收任意⼦类的对象publicstaticvoideatFood(Animala){a.eat();}// 3. 作返回值:返回任意⼦类对象publicstaticAnimalbuyAnimal(Stringvar){if("狗".equals(var)){returnnewDog("狗狗",1);}elseif("猫".equals(var)){returnnewCat("猫猫",1);}else{returnnull;}}publicstaticvoidmain(String[]args){Animalcat=newCat("元宝",2);// 1. 直接赋值:⼦类对象赋值给⽗类对象Dogdog=newDog("⼩七",1);eatFood(cat);eatFood(dog);Animalanimal=buyAnimal("狗");animal.eat();animal=buyAnimal("猫");animal.eat();}}

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

向下转型

将⼀个⼦类对象经过向上转型之后当成⽗类⽅法使⽤,再⽆法调⽤⼦类的⽅法,但有时候可能需要调⽤⼦类特有的⽅法,此时:将⽗类引⽤再还原为⼦类对象即可,即向下转换。

向下转型⽤的⽐较少,⽽且不安全,万⼀转换失败,运⾏时就会抛异常。Java中为了提⾼向下转型的安全性,引⼊了== instanceof== ,如果该表达式为true,则可以安全转换。

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

纪念币自动预约工具完整使用教程:从零开始轻松掌握

还在为纪念币预约而烦恼吗?这款纪念币自动预约工具专为普通用户设计,让你告别繁琐的手动操作。即使你完全没有编程经验,也能在短时间内完成配置,轻松预约到心仪的纪念币。 【免费下载链接】auto_commemorative_coin_booking 项…

作者头像 李华
网站建设 2026/5/30 17:08:54

Windows右键菜单终极优化手册:ContextMenuManager完全使用指南

Windows右键菜单终极优化手册:ContextMenuManager完全使用指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为杂乱的右键菜单而烦恼吗&#x…

作者头像 李华
网站建设 2026/5/30 17:08:36

如何快速优化Windows右键菜单?ContextMenuManager完整使用指南

Windows右键菜单是日常电脑操作中使用频率最高的功能之一,但随着时间的推移,各种软件都会往右键菜单中添加自己的项目,导致菜单变得越来越臃肿。ContextMenuManager作为一款纯粹的Windows右键菜单管理程序,能够帮助你轻松定制、清…

作者头像 李华
网站建设 2026/5/22 7:18:02

JetBrains IDE试用期重置完全指南:轻松延长30天开发体验

JetBrains IDE试用期重置完全指南:轻松延长30天开发体验 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 作为一名开发者,您是否曾经因为JetBrains IDE试用期结束而被迫中断工作&#xff1f…

作者头像 李华
网站建设 2026/5/23 2:38:34

FlutterOpenHarmony商城App图片预览组件开发

前言 图片预览是商城应用中查看商品详情图、评价图等场景的重要功能。用户需要能够放大查看图片细节、左右滑动切换图片、双击缩放等操作。一个设计良好的图片预览组件需要提供流畅的手势交互和清晰的图片展示效果。本文将详细介绍如何在Flutter和OpenHarmony平台上开发图片预览…

作者头像 李华
网站建设 2026/5/20 17:00:13

大模型Token结算系统设计:要考虑TensorRT加速因子

大模型Token结算系统设计:要考虑TensorRT加速因子 在构建大模型服务平台时,一个常被忽视却至关重要的问题浮出水面:为什么两个参数规模完全相同的LLM服务,单位Token成本能相差3倍? 答案往往不在于模型本身,…

作者头像 李华