OOP 经典对比

news/2026/1/21 16:04:52/文章来源:https://www.cnblogs.com/liushoushou/p/19512356

知识点 4.5:OOP 经典对比

1. 重写 (Override) vs 重载 (Overload)

这是 Java 多态性中两个非常重要且容易混淆的概念。

什么是重写 (Override)?

重写是指子类可以重新定义从父类继承来的、具有相同方法签名(方法名和参数列表)的方法。当通过父类引用调用这个方法时,如果引用指向的是子类对象,那么实际执行的是子类重写后的版本。这是实现运行时多态的关键。

什么是重载 (Overload)?

重载是指在同一个类中,允许多个方法拥有相同的方法名,但它们的参数列表必须不同(参数的类型、数量或顺序不同)。编译器在编译时会根据调用方法时传入的参数来决定具体执行哪一个方法。这是一种编译时多态

对比项 重写 (Override) 重载 (Overload)
发生范围 子类和父类之间 同一个类中
方法签名 方法名、参数列表必须相同 方法名必须相同,参数列表(类型、个数、顺序)必须不同
返回类型 返回类型必须与父类兼容(相同或是其子类) 与返回类型无关
访问修饰符 访问权限不能严于父类(如父类是 public,子类不能是 protected 与访问修饰符无关
核心思想 “覆盖”“重做”:子类对父类的行为不满意,重新实现它。体现了运行时多态 “一词多义”:同一个方法名,根据传入参数的不同,有不同的功能。体现了编译时多态
  • 生活比喻:
    • 重写 (Override): 爸爸会做“红烧肉”(父类方法),你觉得他做的太咸了。于是你也学做“红烧肉”(方法名、参数都一样),但是你放的盐更少(方法体实现不同)。别人再提到你家的“红烧肉”,吃到的就是你做的版本。
    • 重载 (Overload): 你有一个技能叫“画画”。你可以“画画(纸)”(draw(Paper p)),也可以“画画(墙)”(draw(Wall w)),还可以“画画(电脑, 软件)”(draw(Computer c, Software s))。虽然都叫“画画”,但根据你使用的工具(参数)不同,具体行为也完全不同。

2. 接口 (Interface) vs 抽象类 (Abstract Class)

两者都是 Java 中用于实现抽象和多态的重要方式,但它们在设计哲学和语法规则上有着本质的区别。

从设计思想上来看:

我喜欢用一个比喻来区分它们:

  • 抽象类 (Abstract Class) 像是“汽车图纸”
    • 它定义了一辆“车”的本质 (is-a 关系)。它规定了所有的车都必须有引擎、轮子这些共同的组成部分(具体属性)基础功能(具体方法),但像“如何加速”这样的具体行为(抽象方法)则留给具体的车型(如轿车、卡车)去实现。子类和抽象类之间是强相关的“是一个”的关系。
  • 接口 (Interface) 像是“USB规范”
    • 它定义了一系列能力 (can-do 关系)。它只规定“如果你想成为一个 USB 设备,你必须能被识别、能传输数据”,但它不关心你到底是一个U盘、一个小风扇还是一个鼠标。任何实现了 USB 接口的设备,都承诺拥有这些能力

从语法规则上来看:

特性 抽象类 (Abstract Class) 接口 (Interface)
继承/实现 子类使用 extends 继承,只能单继承 实现类使用 implements 实现,可以多实现
成员变量 可以有各种类型的成员变量(包括实例变量) 只能有 public static final 类型的常量
构造方法 有构造方法(主要用于子类构造时调用) 没有构造方法
方法 可以包含抽象方法具体方法 Java 8 之前:只能有抽象方法。
Java 8 之后:可以包含 default(默认)方法和 static(静态)方法。
Java 9 之后:可以包含 private 方法。
访问修饰符 方法可以是 public, protected, default 方法默认是 public(Java 9+ 的私有方法除外)

如何选择?

基于以上区别,选择的原则就比较清晰了:

  • 优先使用接口

    • 当你需要定义一组跨越不同类族的共同行为时。例如,Flyable(会飞)接口可以被 Bird(鸟)和 Plane(飞机)同时实现,但它们没有共同的父类。
    • 当你想要实现解耦,定义一套规范或契约时。
    • 当你想要利用 Java 的多实现特性时。
  • 选择使用抽象类

    • 当你需要在多个子类中共享代码或状态时。抽象类可以提供具体的方法实现和实例变量,避免子类重复编写相同的代码。
    • 当你定义的多个类之间存在强烈的 is-a 关系,并且你希望为它们提供一个通用的模板或基类时。例如,Shape(形状)作为抽象类,Circle(圆形)和 Rectangle(矩形)继承它,它们共享了 color(颜色)属性和 getColor() 方法。

总结:接口定义的是“你能做什么”,而抽象类定义的是“你是什么”。在现代 Java 开发中,我们通常更倾向于优先使用接口,因为它更灵活,更能体现“面向接口编程”的思想。只有当多个子类需要复用大量代码或共享状态时,才考虑使用抽象类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1195328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv11+BiFPN革新小麦杂质检测技术

Key Points - 本报告的核心发现与结论(3-5项):YOLOv11 BiFPN 技术组合具备高精度、实时性与强鲁棒性,是小麦杂质检测系统的理想技术选型:该架构通过双向特征融合机制显著提升小目标(如尘土、石子&#xff…

手把手教你实现MCP服务器resources热更新,动态调整不再重启服务

第一章:MCP服务器热更新机制概述 在现代高可用服务架构中,MCP(Modular Control Plane)服务器作为核心控制组件,其持续稳定运行至关重要。热更新机制允许系统在不中断服务的前提下动态加载新代码或配置,极大…

山石网科各硬件产品Console配置口波特率汇总

SG-6000 E/C/P/Z/ISC Probe/LMS 系列设备提供 1 个符合 RS-232C 异步串行规范的配置口(CON 口)。配置口的属性及描述如下表所示:属性 描述连接器类型 RJ-45端口类型 RS-232C波特率 9600bit/s支持服务 与终端的串口相…

揭秘Dify Iteration节点:如何高效处理复杂列表数据?

第一章:揭秘Dify Iteration节点的核心能力 Dify的Iteration节点是工作流编排中实现循环逻辑的关键组件,允许开发者对一组数据进行逐项处理,显著提升自动化流程的灵活性与可扩展性。通过该节点,用户可以在无需编写额外代码的情况下…

基于51单片机智能手环老人防跌倒报警器GSM短信上报设计套件106(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于51单片机智能手环老人防跌倒报警器GSM短信上报设计套件106(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 51单片机智能老人防跌倒报警器GSM短信上报106产品功能描述: 本系统由STC89C52单片机、ADXL345加速度传…

为什么FSMN VAD总检测失败?参数调优实战教程入门必看

为什么FSMN VAD总检测失败?参数调优实战教程入门必看 你是不是也遇到过这种情况:明明音频里有清晰的说话声,FSMN VAD却一点反应都没有?或者语音被莫名其妙地截断,片段切得支离破碎?别急,这并不…

Live Avatar降本部署方案:单GPU+CPU offload低配环境实操教程

Live Avatar降本部署方案:单GPUCPU offload低配环境实操教程 1. 背景与挑战:为什么80GB显存成硬门槛? Live Avatar是由阿里联合高校开源的一款高质量数字人生成模型,支持从文本、图像和音频输入驱动虚拟人物的口型、表情与动作&…

RTX5060显卡对PyTorch与CUDA适配问题解决方案(解决环境依赖问题AI微调部署前奏)

前言 如果大家的电脑显卡是RTX50系列的话,如果按照正常的部署AI,可能尚未进行调试,就会发现环境的依赖报错一大堆,又或者如下图的UserWarning,之所以会是这样,是因为5060的显卡太新了,以至于Py…

2026锦州市英语雅思培训辅导机构推荐;2026权威出国雅思课程排行榜

基于全国雅思培训行业权威调研、锦州市太和区、古塔区、凌河区多维度考生反馈及第三方教育测评认证,本次围绕雅思培训选课核心需求,结合考试提分规律、优质机构筛选标准、高分技巧传授、性价比适配等关键维度,开展深…

强化学习十年演进

结论:未来十年(2025–2035),强化学习将从“样本密集的实验室算法”演进为“多模态、能效优先与社会协同的工程化技术栈”,在北京的机器人与自动驾驶落地应优先关注多模态感知RL、节能(Green)RL …

紧急警告:错误配置导致Claude Desktop丢失MCP Server连接(附修复方案)

第一章:紧急警告:错误配置导致Claude Desktop丢失MCP Server连接 近期多个用户报告,在更新 Claude Desktop 客户端后,应用无法连接至本地运行的 MCP(Model Control Plane)Server,表现为连接超时…

GEO优化公司推荐哪家好?从技术深度到服务能力的权威解析!

随着生成式搜索与AI问答逐渐成为主流信息入口,企业在“被搜索”之外,开始进入“被理解、被引用、被推荐”的新竞争阶段。由此,GEO正在成为企业数字增长的重要基础设施。面对市场上不断涌现的GEO服务商,企业最关心的…

广东激光熔敷公司怎么选,哪家口碑好?

问题1:广东专业激光熔敷哪家专业?激光熔敷技术在锅炉修复中的核心优势是什么? 在广东的工业防腐防磨领域,广东博盈特焊技术股份有限公司是专业激光熔敷服务的标杆企业。作为2026年深交所创业板上市企业(证券代码:…

Pinterest注册失败怎么办?2026最新解决指南在这里

Pinterest作为全球最大的视觉搜索引擎之一,吸引了无数用户加入。然而,很多用户在注册过程中会遇到各种问题,从账号信息填写不完整,到IP地址被识别为异常,种种障碍常常让人感到沮丧。如果你也在Pinterest注册过程中碰壁…

Unsloth资源占用监控:GPU显存与CPU使用率跟踪方法

Unsloth资源占用监控:GPU显存与CPU使用率跟踪方法 你是否在使用Unsloth进行大模型微调时,遇到过显存爆满、训练中断或CPU负载异常的情况?尤其是在本地环境或云服务器上运行LLM(大语言模型)任务时,资源监控…

Paraformer-large语音识别合规性:金融行业落地实践

Paraformer-large语音识别合规性:金融行业落地实践 1. 金融场景下的语音识别需求与挑战 在金融服务领域,无论是电话客服录音、投资顾问沟通记录,还是内部会议纪要,每天都会产生大量语音数据。这些声音背后藏着客户意图、服务反馈…

盘点人工智能转型服务方案,广东省哪家口碑好费用低

2026年人工智能与实体经济融合加速,企业人工智能转型服务方案已成为制造业、农业、服务业突破发展瓶颈、实现降本增效的核心抓手。无论是AI驱动的工业流程优化、可信数据资产化、还是全链路数字化人才培养,优质服务商…

【Dify部署避坑指南】:解决上传文件413错误的5种高效方案

第一章:413错误的成因与影响分析 当客户端向服务器发送请求时,若请求体大小超出服务器允许的上限,服务器将返回 HTTP 413 Request Entity Too Large 错误。该状态码属于客户端错误响应,表明问题出在请求数据量而非服务器本身故障。…

分析成都太阳能板定制厂家,员工素质哪家高

2026年新能源产业加速渗透,定制化太阳能板已成为解决微型设备、便携电子、工业场景供电痛点的核心方案。无论是物联网传感器的续航需求,还是户外设备的轻量化供电改造,优质太阳能板定制服务商的技术适配能力、场景落…

【Web安全】什么是XSS攻击?如何实现手动XSS,利用BeEF执行XSS攻击?

前言 本文主要内容:通过一个最简单的例子说明什么是 XSS 攻击,实现手动注入脚本攻击,以及最后实现利用 BeEF 执行 XSS 攻击 什么是 XSS 攻击 XSS,跨站脚本攻击 JavaScript 代码如何生成网页 实际上网页是由 HTML 翻译而得到的&…