news 2026/4/3 1:22:01

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/4/2 1:38:20

猫抓扩展:解锁网页视频自由下载的智能利器

猫抓扩展:解锁网页视频自由下载的智能利器 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为在线视频无法保存而困扰吗?猫抓浏览器扩展正是你需要的完美解决方案&#xff…

作者头像 李华
网站建设 2026/3/30 2:17:05

NVIDIA Profile Inspector终极指南:深入显卡驱动底层优化

NVIDIA Profile Inspector终极指南:深入显卡驱动底层优化 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏性能瓶颈而困扰?NVIDIA Profile Inspector作为专业级显卡调优…

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

大模型服务等级协议(SLA)中写入TensorRT相关条款

大模型服务等级协议中引入TensorRT的技术实践与工程价值 在当前AI服务大规模落地的背景下,企业对大模型推理性能的要求已从“能跑起来”转向“跑得稳、算得快、控得住”。一个典型的挑战是:某智能客服系统承诺用户99%的请求响应时间不超过500毫秒&#x…

作者头像 李华
网站建设 2026/3/31 1:29:07

猫抓资源嗅探工具:网络资源的智能捕手

猫抓资源嗅探工具:网络资源的智能捕手 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在这个数字资源爆炸的时代,你是否曾为无法快速获取网页中的精彩内容而烦恼?猫…

作者头像 李华
网站建设 2026/4/1 13:46:23

Switch手柄电脑连接终极指南:5步搞定所有连接问题

Switch手柄电脑连接终极指南:5步搞定所有连接问题 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/gh_m…

作者头像 李华
网站建设 2026/3/29 23:24:15

实战演示Keil5汉化过程:常见问题解决方案

手把手教你安全完成Keil5汉化:从原理到实战的完整指南你有没有在打开Keil时,面对满屏英文菜单感到头大?“Project”、“Target”、“Debug Settings”……这些术语对新手来说就像密码本。虽然功能强大,但Keil μVision5长期只提供…

作者头像 李华