0

0

详解方法重写Override与重载Overload的本质区别

舞夢輝影

舞夢輝影

发布时间:2026-03-18 10:01:30

|

489人浏览过

|

来源于php中文网

原创

重写是父子类间的行为替换,解决“谁来执行”;重载是同类中形态扩展,解决“怎么调用”。重载在同个类内、参数不同、编译期绑定;重写需继承、签名相同、运行期动态绑定。

详解方法重写override与重载overload的本质区别

方法重写(Override)和重载(Overload)看起来都是“用同一个名字干不同的事”,但本质完全不同:重写是父子类之间的行为替换,解决的是“**谁来执行**”的问题;重载是同一个类里的形态扩展,解决的是“**怎么调用**”的问题。

发生位置与前提条件不同

重载必须在同一个类内部发生,不需要继承关系,只要方法名相同、参数列表不同即可。比如一个工具类里有多个 parse() 方法:接收 Stringbyte[]InputStream,它们彼此独立,编译器靠参数自动选一个。

重写必须发生在有继承关系的父子类之间,且父类方法必须可被访问(不能是 privatefinal),通常还要是 public/protected 的实例方法(static 方法只能被隐藏,不算重写)。

参数与签名的约束逻辑相反

重载的核心是参数列表必须不同——类型、个数、顺序三者至少一个有差异;返回值类型、异常、访问修饰符全都不影响重载判断。注意:仅靠返回值不同不能构成重载,编译器无法据此决定调用哪个方法。

重写的前提是方法签名必须完全一致——方法名、参数类型、个数、顺序全部相同;返回类型允许协变(Java 5+ 中子类可返回更具体的子类型),但不能更宽泛;访问权限不能收紧,异常声明不能扩大。

Ai好记
Ai好记

强大的AI音视频转录与总结工具

下载

绑定时机与多态类型截然不同

重载在编译期就确定调用哪个方法,属于静态绑定。比如 obj.doWork(123),编译器看到传入的是 int,就直接绑定到参数为 int 的那个重载版本,运行时不会换。

重写在运行期才决定执行哪段代码,属于动态绑定。例如 Animal a = new Dog(); a.speak();,编译时只知道 aAnimal 类型,但运行时发现它实际是 Dog 实例,于是调用 Dog 中重写的 speak() 方法——这才是真正的多态。

设计意图与使用场景有根本差异

重载用于增强同一类的功能表达力,让一个方法名能自然适配多种输入,提升 API 可读性与易用性。例如 String.valueOf() 有 9 个重载版本,覆盖所有基本类型和对象。

重写用于实现子类特异性行为,让通用接口在不同子类中产生不同效果。它是面向对象中“开闭原则”和“里氏替换”的落地支撑,没有重写,多态就只是空谈。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1091

2023.08.02

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

66

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1091

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

619

2024.08.29

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

3

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号