讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Laper
Laper

剧本策划到成片协作

updream

一键生成高质量推广成片

Java中重载和重写有什么区别?

夏瑶吖_7541

夏瑶吖_7541

发布时间:2025-01-16 19:21:49

|

790人浏览过

|

来源于php中文网

原创

重载发生在一个类内,通过不同的方法签名进行区分;重写发生在继承关系中,关注相同的方法签名和返回类型。重载在编译时通过方法签名表选择方法,性能开销小;重写通过动态分派机制在运行时选择方法,实现多态。常见错误包括参数类型不兼容、方法签名不一致和忘记使用@Override注解。合理使用重载和重写有利于代码的可读性、可维护性和可扩展性。

Java中重载和重写有什么区别?

Java的重载与重写:不止是名字一样

很多初学者,甚至一些有一定经验的Java程序员,都对重载(Overloading)和重写(Overriding)这两个概念有点模糊。它们看起来很像,都是关于方法的,但实际上有着本质的区别。这篇文章会深入探讨它们的差异,并分享一些我多年编程生涯中积累的经验和踩过的坑。读完之后,你将能清晰地区分它们,并能更好地运用在你的代码中。

先说结论:重载发生在一个类内部,关注方法签名(方法名+参数列表);重写发生在继承关系中,关注方法签名和返回类型(部分情况下)。 这只是个初步的概括,后面我们会详细解释。

基础知识回顾:

Java是面向对象的语言,继承和多态是其核心特性。理解类、对象、方法、继承、多态这些概念,对理解重载和重写至关重要。如果你对这些概念不熟悉,建议先复习一下Java的基础知识。

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

核心概念解析:重载(Overloading)

重载指的是在一个类中定义多个同名方法,但这些方法的参数列表必须不同。参数列表的不同可以体现在参数的个数、类型或顺序上。 编译器通过方法签名来区分不同的重载方法,在运行时选择正确的方法执行。

举个栗子:

public class OverloadExample {

    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

在这个例子中,add方法被重载了三次,分别接受两个整数、两个浮点数和三个整数作为参数。 编译器会根据你调用add方法时提供的参数类型和个数来选择合适的版本。

重载的工作原理:

编译器在编译阶段就完成了重载方法的选择。它会根据方法签名(方法名和参数列表)创建一个方法签名表,然后在调用方法时,根据参数类型和个数在表中查找匹配的方法。如果找不到匹配的方法,就会报错。 这使得重载的性能开销很小,几乎可以忽略不计。

重写(Overriding)

重写发生在继承关系中。子类可以重写父类的方法,方法签名必须完全相同(方法名、参数列表和返回类型必须一致,但访问修饰符可以更宽松,例如父类方法是public,子类可以是public,也可以是protected)。 运行时,根据对象的实际类型来决定调用哪个方法,这就是多态的体现。

再举个栗子:

public class Animal {
    public void makeSound() {
        System.out.println("Generic animal sound");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }
}

这里,Dog类重写了Animal类的makeSound方法。当创建一个Dog对象并调用makeSound方法时,会输出"Woof!",而不是"Generic animal sound"。

重写的工作原理:

重写方法的选择发生在运行时,通过虚拟机(JVM)的动态分派机制实现。JVM会根据对象的实际类型找到对应的方法执行。 这使得重写能够实现多态性,让程序更灵活。

常见错误与调试技巧:

  • 重载时参数类型不兼容: 例如,你不能重载一个方法,使其同时接受Integer和int作为参数,因为它们会被视为相同的类型。
  • 重写时方法签名不一致: 如果子类的方法签名与父类的方法签名不完全一致,编译器会报错。
  • 忘记使用@Override注解: 虽然不是必须的,但使用@Override注解可以帮助编译器检查是否正确重写了父类的方法,避免一些潜在的错误。

性能优化与最佳实践:

重载和重写本身对性能的影响很小。 更重要的是,要保证代码的可读性和可维护性。 合理地使用重载和重写可以使代码更简洁、更易于理解和扩展。 避免过度使用重载,以免造成代码难以理解。

总而言之,理解重载和重写的区别,对编写高质量的Java代码至关重要。记住它们各自的应用场景和潜在问题,才能更好地驾驭Java这门强大的语言。 多实践,多思考,你才能成为真正的编程大牛。

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
go语言 面向对象
go语言 面向对象

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

7575

2025.09.05

java面向对象
java面向对象

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

362

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

384

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

263

2026.04.17

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

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

375

2025.11.27

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

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

375

2025.11.27

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

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

375

2025.11.27

string转int
string转int

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

7319

2023.08.02

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

40

2026.11.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Postman安装指南
Postman安装指南

共0课时 | 0人学习

DBeaver生态工具dbvr官方手册
DBeaver生态工具dbvr官方手册

共0课时 | 0人学习

DBeaver事务控制指南
DBeaver事务控制指南

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn