当前位置: 首页 > news >正文

面向对象 方法重写 继承 多态 final 相关案例

交通工具调度系统(核心:继承 + 多态 + final + 方法重写)

需求

  1. 定义父类Vehicle(交通工具),包含final方法getLicense()(获取牌照规则,禁止子类重写)、普通方法run()

  2. 子类CarBus继承Vehicle,重写run()方法实现不同运行逻辑;

  3. 定义VehicleDispatcher调度类,使用多态统一调度所有交通工具;

  4. 禁止创建Vehicle父类对象(可结合抽象类优化),final方法保护核心逻辑不被篡改。

打印结果:

特斯拉小汽车在公路行驶,最高时速120km/h 交通工具牌照统一由交通局颁发 ------------------------ 宇通公交车在专用车道行驶,承载乘客 交通工具牌照统一由交通局颁发

解题思路(按需求拆解实现步骤)

  1. 设计父类Vehicle:为了禁止创建父类对象,将其定义为抽象类;包含final修饰的getLicense()方法(固定牌照规则,禁止子类篡改),同时定义抽象的run()方法(强制子类根据自身特性重写,实现不同运行逻辑)。
  2. 实现子类CarBus:两个子类均继承抽象父类Vehicle,必须重写父类的抽象run()方法,分别编写小汽车、公交车的专属运行逻辑;直接继承父类的final方法getLicense(),无需也不能重写。
  3. 设计调度类VehicleDispatcher:核心是利用多态实现统一调度,定义dispatch()方法,参数类型为父类Vehicle;该方法内部调用vehicle.run()vehicle.getLicense(),因多态特性,传入不同子类对象时,会自动执行对应子类重写的run()方法,而getLicense()始终执行父类固定逻辑。
  4. 测试运行:创建调度器对象,通过父类引用指向子类对象的多态写法,创建CarBus的实例,将实例传入调度器的dispatch()方法,实现统一调度并输出指定结果。

知识点(结合需求一一对应)

1. 抽象类(abstract class

  • 作用:满足 “禁止创建Vehicle父类对象” 的需求,抽象类无法通过new关键字实例化。
  • 关键特性:抽象类中可包含抽象方法abstract修饰,无方法体)和普通方法 /final方法;包含抽象方法的类,必须被定义为抽象类。
  • 本案例应用Vehicle为抽象类,run()为抽象方法,强制子类CarBus必须重写该方法,保证子类必有专属的运行逻辑,避免父类方法逻辑不适用子类的问题。

2. 继承(extends

  • 作用:让CarBus复用Vehicle中的通用功能(final方法getLicense()),同时实现子类的个性化扩展(重写run())。
  • 关键特性:Java 为单继承,子类只能直接继承一个父类;子类会继承父类中所有非私有(public/protected)的方法和属性。
  • 本案例应用Car extends VehicleBus extends Vehicle,子类直接使用父类的getLicense()方法,无需重复编写,实现代码复用。

3.final修饰符(方法层面)

  • 作用:满足 “保护核心逻辑不被篡改” 的需求,final修饰的方法禁止子类重写
  • 关键特性final方法的逻辑是固定的,子类只能继承使用,无法修改,适合定义通用、不可变的核心规则(如本案例的牌照颁发规则)。
  • 本案例应用getLicense()final修饰,CarBus无法重写该方法,保证所有交通工具的牌照规则统一。

4. 方法重写(@Override

  • 作用:让子类根据自身特性,修改父类中方法的实现逻辑,实现 “同一方法,不同行为”。
  • 重写规则:方法名、参数列表、返回值类型(子类返回值可兼容父类)必须与父类一致;访问权限不能比父类更严格(如父类public,子类不能是private);抽象方法的子类重写,需去掉abstract并编写方法体。
  • 本案例应用CarBus分别重写Vehicle的抽象run()方法,编写各自的行驶逻辑,@Override注解显式标记重写,提高代码可读性,编译器会校验重写规则是否正确。

5. 多态(核心)

  • 定义:指 “父类引用指向子类对象”,实现 “一个接口,多种实现”,是统一调度不同子类的核心。
  • 前提条件:存在继承关系、子类重写父类方法、父类引用指向子类对象(如Vehicle tesla = new Car("特斯拉"))。
  • 运行特性:编译时看父类(编译器校验父类是否有该方法),运行时看子类(实际执行子类重写后的方法逻辑)。
  • 本案例应用:调度类VehicleDispatcherdispatch()方法参数为父类Vehicle,可接收所有Vehicle的子类对象(CarBus);调用vehicle.run()时,运行时会根据传入的实际子类对象,执行对应重写的run()方法,而vehicle.getLicense()因是final方法无法重写,始终执行父类逻辑,最终实现统一调度不同交通工具。

识点关联逻辑

本案例的核心是通过抽象类 + 继承 + 方法重写为多态铺路,通过 final 保护核心逻辑,最终通过多态实现统一调度

  1. 抽象类Vehicle定义了通用规范(牌照规则)和抽象要求(运行逻辑),避免父类实例化且强制子类实现个性化逻辑;
  2. 继承让子类复用通用规范,方法重写让子类实现个性化逻辑,final保证通用规范不被篡改;
  3. 多态让调度类无需区分CarBus,只需针对父类Vehicle编写调度逻辑,降低代码耦合性,提高扩展性(后续新增交通工具子类,只需重写run(),调度类无需修改)。
http://www.cnnetsun.cn/news/1792409.html

相关文章:

  • Linux I/O 演进史:从管道到零拷贝,一篇串起个服务端核心原语纠
  • Kiro IDE remote extension host terminated unexpectedly #4231 官方状态:**未修复**(2026最新实测)
  • OpenClaw安装使用指南
  • 2026届最火的六大AI辅助论文网站解析与推荐
  • plog嵌入式C++日志库:轻量、零开销与跨平台实践
  • 嵌入式网络接口设计:硬件选型与软件优化实践
  • M5StickC-Plus嵌入式开发全指南:ESP32-PICO-D4硬件解析与低功耗实践
  • PCSEL(光子晶体表面发射激光器)技术首次展示
  • 基于组件化架构的Bilibili-Evolved性能优化实战:实现60fps流畅播放与40%内存占用降低
  • 阻抗匹配原理与工程实践全解析
  • Omdia:受社交视频广告推动,2030年全球在线视频和电视收入将超过1万亿美元
  • 2026年怎么安装OpenClaw?腾讯云5分钟喂奶级部署+大模型APIKey配置、Skill集成流程
  • ESP32轻量级Google OAuth 2.0 JWT签名库
  • .NET 诊断技巧 | 日志框架原理、手写日志框架学习咸
  • 微软发布的《生成式人工智能初学者.NET 第二版》课程辰
  • Keil MDK中printf输出配置与优化指南
  • 2025最权威的六大降重复率平台实测分析
  • 嵌入式电子罗盘算法库:FPU加速的磁力计校准与姿态解算
  • ABAQUS盾构隧道开挖模型Cae文件详解:一环七片结构,含螺栓配筋及毫米单位制应用
  • 向量索引预热耗时23秒、QPS跌至17?EF Core 10向量搜索成本失控的5个反直觉根源,现在修复还来得及
  • W25Qxx SPI Flash驱动设计与裸机/RTOS工程实践
  • 并发突增2000QPS时网关雪崩?手把手复现并修复PHP-FPM + Keepalived + Consul动态路由链路
  • 方法层的僭越:TMM诊断心理学、经济学与营养学的“真理危机”
  • 无标签3CL蛋白酶检测试剂盒:均相免洗FRET法,支持高通量抑制剂筛选
  • 5分钟终极指南:Reset Windows Update Tool快速修复Windows更新问题
  • AI开发-python-langchain框架(--自定义Tool )脚
  • 嵌入式系统中状态机接收模块的设计与优化
  • 深度传感相机实时人物韩流/动漫风格迁移系统:从原理到实践
  • RAG-Anything葡萄酒数据实测
  • 计算机等级考试2023(2)—软件设计师试卷—东方仙盟