0

0

Java方法重载与重写的核心概念

P粉602998670

P粉602998670

发布时间:2026-01-06 16:41:02

|

819人浏览过

|

来源于php中文网

原创

方法重载发生在同一类中,靠参数列表不同实现编译时多态;方法重写发生在子类对父类同签名方法的覆盖,实现运行时多态。

java方法重载与重写的核心概念

方法重载(Overload)和重写(Override)看起来都叫“同名方法”,但它们发生的场景、编译器/运行时的处理方式、以及语义完全不一样——混淆这两者,轻则编译报错,重则逻辑出 bug,尤其在多态调用或泛型推导时容易掉坑。

重载发生在同一个类里,靠参数列表区分

重载是编译期行为,只看引用类型和实参的静态类型。只要 方法名相同参数个数、类型或顺序不同,就构成重载;返回类型、访问修饰符、异常声明都不参与判断。

常见错误现象:
• 写了两个仅返回类型不同的方法(如 int getValue()String getValue()),编译直接报错「重复的方法」
• 在子类中试图“重载父类方法”却改了参数类型(比如父类是 void process(List<String>),子类写了 void process(ArrayList<String>)),这确实是重载,但调用时可能因类型擦除或泛型推导失效而意外走错分支

实操建议:
• 用 IDE 的 “Find Usages” 查看某个方法被哪些重载版本调用,比靠记忆靠谱
• 避免靠自动装箱/拆箱或隐式类型转换来区分重载(如 void f(int)void f(Integer)),JVM 会优先选基本类型版本,容易误判
• 参数为泛型时,注意类型擦除后是否真能区分(如 <T> void m(T)<T extends Number> void m(T) 编译后都是 void m(Object),不构成重载)

立即学习Java免费学习笔记(深入)”;

重写必须满足签名一致,且受访问权限和异常约束

重写是运行期行为,依赖对象的实际类型。子类方法要重写父类方法,必须满足:方法名参数列表返回类型(协变允许子类型) 完全一致;同时不能比父类更严格地限制访问(如父类 protected,子类不能写 private);抛出的检查异常不能新增,只能缩小或删除。

常见错误现象:
• 子类方法加了 @Override 注解但编译报错,大概率是参数类型没对齐(比如父类是 CharSequence,子类写了 String
• 父类方法声明抛出 IOException,子类重写时抛出 Exception,编译失败
• 用了 default 方法但忘了接口里不能有 static 重写(Java 8+ 接口中的 static 方法不可重写)

Bolt.new
Bolt.new

Bolt.new是一个免费的AI全栈开发工具

下载

实操建议:
• 所有重写方法强制加 @Override 注解,让编译器帮你校验签名一致性
• 返回类型用协变时,确保子类返回类型是父类返回类型的子类(如父类返回 Object,子类可返回 String;但反过来不行)
• 接口默认方法被实现类重写时,不能降低可见性(接口中 public default,实现类也必须是 public

重载和重写的调用路径完全不同

重载方法的选择在编译期完成,取决于变量声明类型;重写方法的执行在运行期决定,取决于对象实际类型。这是理解多态的关键分水岭。

示例代码清晰展示差异:

class Animal { void speak() { System.out.println("Animal"); } }
class Dog extends Animal { 
    @Override void speak() { System.out.println("Woof"); }
    void bark() { System.out.println("Bark!"); }
}
class Test {
    static void call(Animal a) { a.speak(); }         // 运行时绑定,输出 Woof
    static void call(Dog d) { d.bark(); }            // 编译期绑定,只认 Dog 类型

    public static void main(String[] args) {
        Animal a = new Dog();
        call(a);   // 调用第一个 call(Animal),再触发 speak() 重写 → Woof
        // call(a); // 如果取消注释这行,编译失败:没有 call(Animal) 版本匹配
    }
}

性能影响:
• 重载无额外开销,纯编译期决策
• 重写涉及虚方法表(vtable)查找,现代 JVM 通过内联和去虚拟化优化得极好,一般无需担心,但反射调用 Method.invoke() 会绕过这些优化,明显变慢

最容易被忽略的是:重载解析发生在编译期,所以泛型类型参数、类型推断结果、甚至 var 的推导结果,都会直接影响最终调用哪个重载版本;而重写只看运行时对象,跟声明类型无关。这两个机制一旦混用(比如在泛型方法里做重载分发),很容易出现“明明传了 String 却调到了 Object 版本”的情况。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
string转int
string转int

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

1030

2023.08.02

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中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1030

2023.08.02

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

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

612

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

334

2025.08.29

C++中int的含义
C++中int的含义

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

235

2025.08.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.2万人学习

Java 教程
Java 教程

共578课时 | 81.1万人学习

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

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