Java核心知识点之方法重载(Overload)与方法重写(Override)详解

 更新时间:2026年07月15日 09:38:06   作者:mgw1413  
在Java中方法重写(Override)和方法重载(Overload)是面向对象编程的两个核心概念,它们都体现了多态性,但在实现方式和应用场景上有本质区别,这篇文章主要介绍了Java核心知识点之方法重载(Overload)与方法重写(Override)的相关资料,需要的朋友可以参考下

前言

在 Java 面向对象编程中,方法重载方法重写是两个高频核心知识点,名字相似但功能、规则、使用场景完全不同。本文用最清晰的定义、规则、示例、对比,帮你彻底分清两者。

一、方法重载(Overload)

1. 定义

同一个类中,方法名相同,但参数列表不同的多个方法,就是方法重载。作用:让同一个方法名,能处理不同类型、不同数量的参数,使用更统一、更简洁。

2. 核心规则(必须记住)

  • 同一个类中
  • 方法名必须相同
  • 参数列表必须不同(个数、类型、顺序任意一个不同)
  • 返回值、修饰符、异常不影响重载
  • 编译器在编译阶段确定调用哪个方法(编译时多态

3. 代码示例

public class Calc {
    // 两个int相加
    public int add(int a, int b) {
        return a + b;
    }
 
    // 重载:三个int相加(参数个数不同)
    public int add(int a, int b, int c) {
        return a + b + c;
    }
 
    // 重载:double相加(参数类型不同)
    public double add(double a, double b) {
        return a + b;
    }
}

4. 典型使用场景

  • 工具类方法:Arrays.asList()String.valueOf()
  • 构造方法重载
  • 统一功能、不同参数的业务方法

二、方法重写(Override)

1. 定义

子类继承父类后,重新实现父类中已有的方法,方法声明不变,方法体改变,就是方法重写。作用:子类可以保留父类方法名,但实现自己的逻辑(运行时多态)。

2. 核心规则(必须记住)

  • 发生在父子类之间
  • 方法名、参数列表、返回值类型(基本一致)必须相同
  • 子类方法权限不能更严格(public > protected > default > private)
  • 不能重写父类privatestaticfinal方法
  • 最好加上@Override注解(编译校验)

3. 代码示例

// 父类
public class Animal {
    public void eat() {
        System.out.println("动物吃东西");
    }
}
 
// 子类
public class Dog extends Animal {
    // 重写父类方法
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}

4. 典型使用场景

  • 子类需要自定义父类行为
  • 多态实现:父类引用指向子类对象
  • 框架中大量使用(如toString()equals()

三、重载 vs 重写 终极对比表

对比项方法重载(Overload)方法重写(Override)
位置同一个类中父子类之间
方法名必须相同必须相同
参数列表必须不同必须相同
返回值无关必须兼容一致
权限修饰符无关不能更严格
注解不需要推荐 @Override
多态类型编译时多态运行时多态
目的统一方法名,处理不同参数子类修改父类方法逻辑

四、一句话总结

  1. 重载:同类、同名、不同参 —— 一个方法多种参数版本
  2. 重写:子类、同名、同参数 —— 子类改父类方法实现

总结

  • 方法重载:同一个类里,方法名一样,参数不一样,编译时确定调用。
  • 方法重写:子类继承父类,方法声明完全一样,方法体重写,运行时确定调用。
  • 两者都是 Java 多态的体现,但重载是编译时多态,重写是运行时多态

到此这篇关于Java核心知识点之方法重载(Overload)与方法重写(Override)的文章就介绍到这了,更多相关Java方法重载与方法重写内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 域对象共享数据的实现

    java 域对象共享数据的实现

    本文主要介绍了java 域对象共享数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Javaweb监听器实例之统计在线人数

    Javaweb监听器实例之统计在线人数

    这篇文章主要为大家详细介绍了Javaweb监听器实例之统计在线人数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

    RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

    本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchange插件实现消息级延迟投递,需配置交换机类型和header设置延迟时间,相比原生TTL方案更灵活简洁,适用于订单超时、注册邮件等场景,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-08-08
  • 当Mybatis遇上目录树超全完美解决方案

    当Mybatis遇上目录树超全完美解决方案

    这篇文章主要介绍了当Mybatis遇上目录树有哪些解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Kafka简单客户端编程实例

    Kafka简单客户端编程实例

    这篇文章主要为大家详细介绍了Kafka简单客户端编程实例,利用Kafka的API进行客户端编程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • java多线程CountDownLatch与线程池ThreadPoolExecutor/ExecutorService案例

    java多线程CountDownLatch与线程池ThreadPoolExecutor/ExecutorService案

    这篇文章主要介绍了java多线程CountDownLatch与线程池ThreadPoolExecutor/ExecutorService案例,
    2021-02-02
  • springboot实现拦截器的3种方式及异步执行的思考

    springboot实现拦截器的3种方式及异步执行的思考

    实际项目中,我们经常需要输出请求参数,响应结果,方法耗时,统一的权限校验等。本文首先为大家介绍 HTTP 请求中三种常见的拦截实现,并且比较一下其中的差异。感兴趣的可以了解一下
    2021-07-07
  • 解析Flink内核原理与实现核心抽象

    解析Flink内核原理与实现核心抽象

    Flink API提供了开发的接口,此外,为了实现业务逻辑,还必须为开发者提供自定义业务逻辑的能力,下面为大家解析Flink内核原理与实现核心抽象
    2021-08-08
  • springboot中@RequestMapping的用法

    springboot中@RequestMapping的用法

    这篇文章主要介绍了springboot中@RequestMapping的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java利用Spire.PDF for Java实现在PDF中添加或删除数字签名

    Java利用Spire.PDF for Java实现在PDF中添加或删除数字签名

    在数字化办公日益普及的今天,PDF文档的安全性与真实性变得尤为重要,本文将深入探讨如何在Java环境中,利用强大的Spire.PDF for Java库,对PDF文档进行数字签名的添加与删除操作,有需要的可以了解下
    2025-11-11

最新评论