恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

【Java 多态详解】:一次讲透重写、转型与绑定机制

  • 首页
  • 资讯中心
  • /
  • 【Java 多态详解】:一次讲透重写、转型与绑定机制

相关资讯

Hindsight:让LLM Agent具备回溯性推理的记忆架构实战 2026/10/1 11:48:15
计算机科学与技术是一门理论与实践高度融合的学科,其知识体系既包括硬件基础、系统软件、网络通信,也涵盖数据管理 2026/10/1 11:48:15
博图FB块与IEC定时器完全指南:从创建到调用,覆盖S7-1200/1500项目实战 2026/10/1 11:48:15

最新资讯

FPGA器件编程全流程解析:从RTL设计到JTAG下板的常见坑与排查
Jev模型三层验证:判断-分类-聚合的AI落地新范式
微信小程序校园班车查询与座位预约系统设计解析
MindSpore数据变换与预处理实战:从基础管道到大模型微调
微星电脑重装系统:UEFI BIOS设置与U盘启动全解析
摩尔线程v240.50.0.2社区版驱动实测:游戏优化与避坑指南

今日推荐

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

本周热门

从像素到笔画:srt-whiteboard-animation骨架笔迹追踪实现(Zhang-Suen细化+8邻接追踪)
网站建设的英语怎么说?别只背单词,看完这套安全完整流程才敢上线
新手入门看这篇:建设网站加盟避坑指南与SEO实操

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

【Java 多态详解】:一次讲透重写、转型与绑定机制

发布时间:2026/10/1 11:48:15
【Java 多态详解】:一次讲透重写、转型与绑定机制 引言多态是面向对象编程的三大特性之一也是 Java 中最能体现“抽象与灵活”的设计思想。本文将从重写与重载的区别讲起逐步深入向上转型、向下转型以及动态绑定与静态绑定的底层机制帮助你真正理解多态的本质。文章目录引言1.1 多态多态的条件1.2 重写Override重写规则重写与重载的区别1.3 向上转型向上转型使用场景1.4 向下转型1.5 instanceof 关键字的使用1.6 动态绑定与静态绑定静态绑定编译时动态绑定运行时动态绑定 vs 静态绑定多态优点1.1 多态多态的定义同一操作作用于不同对象产生不同的执行结果多态的条件继承、重写、通过父类的引用调用重写的方法多态体现在代码运行时当传递不同类对象时会调用对应类中的方法。packagedemo1;//父类publicclassAnimal{publicStringname;publicintage;publicAnimal(Stringname,intage){this.namename;this.ageage;}publicvoideat(){System.out.println(this.name吃饭);}}publicclassCatextendsAnimal{publicCat(Stringname,intage){super(name,age);}Overridepublicvoideat(){System.out.println(this.name吃鱼);}}publicclassDogextendsAnimal{publicDog(Stringname,intage){super(name,age);}Overridepublicvoideat(){System.out.println(this.name吃骨头);}}publicclassmain{//这里形参必须是父类 能够接收子类publicstaticvoideat(Animalanimal){animal.eat();}//编译器在编译代码时 不知道要调子类中谁的eat的⽅法//这里是动多态 详细可看动态绑定publicstaticvoidmain(String[]args){CatcnewCat(uu,2);DogdnewDog(ww,5);eat(c);eat(d);}}//运行结果uu吃鱼 ww吃骨头1.2 重写Override重写的定义子类重新实现父类中已有的方法重写规则必须与父类方法保持一致 返回值类型 方法名参数重写的返回值类型可以不同但是必须是父子关系(协变类型)publicAnimaleat(){System.out.println(this.name吃饭);returnnull;}OverridepublicDogeat(){System.out.println(this.name吃骨头);returnnull;}访问权限 子类要父类被staticfinalprivate修饰的方法都不能被重写static方法属于类本身不是属于对象实例的而重写 是面向对象里「子类对象覆盖父类对象的实例方法」的机制final方法的实现逻辑是父类定死的不允许子类改写/重写防止子类通过重写破坏父类设计。private只能访问一个类重写跨类了override注解可以对重写方法进行合法性校验比如方法名写错之类的重写与重载的区别【重载】同一个类中方法名相同、参数列表不同参数个数、类型、顺序至少一个不同对比维度重写Override重载Overload发生位置子类中同一个类中方法名必须相同必须相同参数列表必须相同必须不同个数、类型、顺序返回值类型相同或协变类型可以不同访问权限子类不能低于父类无限制修饰符不能是 static、final、private无限制绑定方式动态绑定运行时静态绑定编译期目的子类重新实现父类方法提供多个同名但参数不同的方法1.3 向上转型向上转型的定义子类对象赋值给父类引用向上转型使用场景直接赋值publicclassAnimal{//省略了}publicclassCatextendsAnimal{//省略了}//向上转型AnimalanewCat();方法传参publicclassmain{//这里形参必须是父类 能够接收子类publicstaticvoideat(Animalanimal){animal.eat();}publicstaticvoidmain(String[]args){//传参eat(newCat(uu,2));}}方法返回publicstaticAnimalgetAnimal(){returnnewDog();// 向上转型 Dog → Animal}向上转型后只能调用父类中声明的方法//父类publicclassAnimal{publicStringname;publicintage;publicAnimal(Stringname,intage){this.namename;this.ageage;}publicvoideat(){System.out.println(this.name吃饭);}}//子类publicclassCatextendsAnimal{publicCat(Stringname,intage){super(name,age);}Overridepublicvoideat(){System.out.println(this.name吃鱼);}//子类独有的方法publicvoidrun(){System.out.println(this.name逛街);}}publicclassmain{publicstaticvoidmain(String[]args){Animala1newCat(mimi,5);Animala2newDog(kimi,4);a1.eat();//这里报错 Animal类中没有run⽅法a1.run();}}1.4 向下转型向下转型的定义父类引用强制转换为子类类型Why由于向上转型无法调用子类独有的方法所以向下转型简单讲就是还原向下转型的语法与风险ClassCastExceptionpublicclassmain{publicstaticvoidmain(String[]args){Animala1newCat(mimi,5);Animala2newDog(kimi,4);a1.eat();//这里报错 Animal类中没有run⽅法a1.run();//此时还原 之前对象是猫 所以还原安全Catcat(Cat)a1;cat.run();//如果强制还原为狗//会触发ClassCastException异常Dogdog(Dog)a1;dog.run();1.5 instanceof 关键字的使用向下转型不安全所以引入instanceof关键字判断如果表达式为true则可以安全转换publicclassmain{publicstaticvoidmain(String[]args){Animala1newCat(mimi,5);Animala2newDog(kimi,4);a1.eat();//判断 如果true就强制转换对应的类型if(a1instanceofCat){Catcat(Cat)a1;cat.run();}elseif(a1instanceofDog){Dogdog(Dog)a1;dog.run();}}}1.6 动态绑定与静态绑定前面讲多态时提到「编译器在编译代码时不知道要调子类中谁的 eat 方法」这背后就是绑定机制在起作用。绑定指的是方法调用与具体方法实现之间建立关联的过程。静态绑定编译时定义在编译阶段就能确定调用哪个方法由编译器直接完成绑定。特点效率高运行时不需额外判断。适用场景static方法、private方法、final方法以及重载Overload。publicclassCalculator{// 重载编译期就能确定调用哪个 addpublicintadd(inta,intb){returnab;}publicdoubleadd(doublea,doubleb){returnab;}}// 编译时根据参数类型 (int, int) 直接绑定到第一个 addCalculatorcnewCalculator();c.add(1,2);// 静态绑定 → int addc.add(1.0,2.0);// 静态绑定 → double add动态绑定运行时定义在运行阶段才根据对象的实际类型确定调用哪个方法。特点灵活是多态实现的底层机制。适用场景重写Override即通过父类引用调用被子类重写的方法。publicclassmain{publicstaticvoideat(Animalanimal){// 编译期只知道 animal 是 Animal 类型// 运行期根据实际传入的对象Cat / Dog动态绑定到对应 eat()animal.eat();}publicstaticvoidmain(String[]args){eat(newCat(uu,2));// 动态绑定 → Cat.eat() 输出 uu吃鱼eat(newDog(ww,5));// 动态绑定 → Dog.eat() 输出 ww吃骨头}}动态绑定 vs 静态绑定对比维度动态绑定静态绑定绑定时机运行时编译时判断依据对象的实际类型变量的声明类型对应机制重写重载典型方法实例方法非 final/static/privatestatic、private、final 方法小结多态之所以能「同一操作、不同结果」正是因为动态绑定在运行时根据对象的真实类型把方法调用绑定到正确的实现上。这也是为什么向上转型后调用eat()依然能输出子类的结果——编译器看的是父类引用运行时绑定的却是子类方法。多态优点//父类publicclassScope{publicvoiddraw(){System.out.println(画人体);}}//子类publicclassbodyextendsScope{Overridepublicvoiddraw(){System.out.println(身体body就绪);}}publicclasshandextendsScope{Overridepublicvoiddraw(){System.out.println(手长出来了);}}publicclassheadextendsScope{Overridepublicvoiddraw(){System.out.println(头头头头);}}publicclasstailextendsScope{Overridepublicvoiddraw(){System.out.println(隐形尾巴);}}【未运用多态】publicclassTest{publicstaticvoidmain(String[]args){body bnewbody();hand anewhand();head hnewhead();tail tnewtail();String[]scopes{body,hand,head,tail};//增强for循环for(Strings:scopes){if(body.equals(s)){b.draw();}elseif(hand.equals(s)){a.draw();}elseif(head.equals(s)){h.draw();}elseif(tail.equals(s)){t.draw();}}}}//运行结果//身体body就绪//头头头头//手长出来了//隐形尾巴【运用多态】运用多态则不需要那么多循环可以简化代码可扩展性强。假如我现在要加入一个eyes类只需要新建类修改Scope数组之前未使用多态则需要再写if-elsepublicstaticvoidmain(String[]args){Scope[]scopes{newbody(),newhead(),newhand(),newtail()};for(Scopes:scopes){s.draw();}}

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号