Java学习123——方法的重载(Overloading)和重写(Overriding)

Java学习123——方法的重载(Overloading)和重写(Overriding)

经验文章nimo972025-06-01 0:58:075A+A-

在Java中,方法的重载(Overloading)和重写(Overriding)是面向对象编程中的两个重要概念,它们分别体现了编译时多态和运行时多态的特性。以下是两者的详细对比:


方法重载(Overloading)

  1. 定义
    在同一个类中,允许存在多个同名方法,但这些方法的参数列表必须不同(类型、数量或顺序不同)。
  2. 关键点
  • 参数列表必须不同:仅返回值不同无法构成重载。
  • 访问修饰符和返回类型:可以不同,不影响重载。
  • 作用范围:发生在同一个类或父子类之间(子类可以重载父类方法)。
  • 编译时多态:编译器根据调用时的参数决定具体调用哪个方法。

示例

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



方法重写(Overriding)

  1. 定义
    子类重新定义父类中已有的方法,方法名、参数列表和返回类型必须相同(返回类型支持协变)。
  2. 关键点
方法签名一致:方法名、参数列表和返回类型(允许子类返回更具体的类型)必须相同。
访问权限:不能比父类更严格(例如父类为 public,子类不能为 private)。
异常限制:不能抛出比父类更宽泛的检查型异常。
运行时多态:通过对象实际类型决定调用哪个方法。
限制条件:不能重写 final、static 或 private 方法。

示例

class Animal {
    public void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Dog barks");
    }
}



核心区别

特性

重载(Overloading)

重写(Overriding)

作用范围

同一个类或父子类

子类与父类之间

参数列表

必须不同

必须相同

返回类型

可以不同

必须相同(支持协变返回类型)

异常处理

无限制

不能抛出更宽泛的检查型异常

访问修饰符

无限制

不能比父类更严格

多态性

编译时多态(静态绑定)

运行时多态(动态绑定)

方法类型

实例方法、静态方法均可

仅实例方法(静态方法为隐藏,非重写)


注意事项

  1. 重载中的自动类型转换
    若参数类型不精确匹配,编译器会尝试自动类型提升(如
    intdouble)。
  2. 协变返回类型
    子类重写方法的返回类型可以是父类方法返回类型的子类(例如父类返回
    Object,子类返回 String)。
  3. 静态方法隐藏
    若子类定义与父类相同的静态方法,父类方法会被隐藏,调用时由引用类型决定。
  4. 私有方法不可重写
    私有方法在子类中不可见,因此同名方法视为新方法,而非重写。

通过理解重载和重写的机制,可以更灵活地设计类的层次结构和方法调用逻辑,充分利用Java的多态特性。

点击这里复制本文地址 以上内容由nimo97整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

尼墨宝库 © All Rights Reserved.  蜀ICP备2024111239号-7