MST

星途 面试题库

面试题:Java中方法重载与重写的区别

请详细阐述Java中方法重载(Overloading)与方法重写(Overriding)在定义、规则、发生场景等方面的区别,并各举一个简单代码示例说明。
10.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

方法重载(Overloading)

  1. 定义:在同一个类中,允许存在多个方法名相同,但参数列表不同(参数个数、参数类型或参数顺序不同)的方法。
  2. 规则
    • 方法名必须相同。
    • 参数列表必须不同(参数个数、类型或顺序至少有一个不同)。
    • 返回类型可以相同也可以不同,不能仅依靠返回类型不同来重载方法。
    • 访问修饰符可以不同。
  3. 发生场景:常用于对同一类行为进行多样化的操作,例如根据不同的参数类型或个数执行不同的逻辑。
  4. 代码示例
public class OverloadingExample {
    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;
    }
}

方法重写(Overriding)

  1. 定义:子类对父类中已有的方法进行重新实现。
  2. 规则
    • 方法名、参数列表、返回类型(Java 5.0 后支持协变返回类型,即子类重写方法的返回类型可以是父类被重写方法返回类型的子类)必须与父类中被重写的方法完全相同。
    • 访问修饰符的限制不能比父类中被重写方法的更严格,可以相同或更宽松(例如父类方法是 protected,子类重写方法可以是 protected 或 public)。
    • 不能重写父类中声明为 final 的方法。
    • 重写方法不能抛出比父类被重写方法更多的异常,或者可以抛出父类被重写方法异常类型的子类异常(可以不抛出异常)。
  3. 发生场景:当子类需要对父类的某个行为进行特殊化或优化时使用。
  4. 代码示例
class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

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