重写和重载的区别(4大区别)

重载(Overloading)

重载是指在同一个类中定义多个方法,它们的名字相同,但参数列表不同参数的数量、或类型不同)。

如下所示:

public class Calculator {
    // 方法重载:add方法有不同的参数列表
    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;
    }
}

上面的参数不同,比如根据参数的类型不同:int、double来区别,以及数量的不同,add(int a, int b, int c),这里是3个参数来区分。

重载方法在编译时,根据传递的参数来决定调用哪个方法,这样可以使一个方法名,可以处理不同类型、或数量的输入。

 

重写(Overriding)

重写是指在子类中,重新定义从父类继承的方法,目的是修改、或扩展父类方法的行为。

如下所示:

class Animal {
    // 父类方法
    public void makeSound() {
        System.out.println("Some generic animal sound");
    }
}

class Dog extends Animal {
    // 子类重写父类方法
    @Override
    public void makeSound() {
        System.out.println("Bark");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound();  // 输出 "Bark"
    }
}

重写的方法必须:具有与被重写的方法相同的名称、参数列表、和返回类型。

 

4大区别

实现方式不同

重载:在同一个类中,方法名称相同,但参数列表不同;

重写:在子类中,方法名称、参数列表和返回类型必须与父类方法相同。

作用域不同

重载:发生在同一个类内部;

重写:发生在父类、和子类之间。

时机不同

重载:编译时根据方法签名(比如:方法名和参数列表),决定调用哪个方法。

重写:运行时根据对象的实际类型决定调用哪个方法。

目的不同

重载:增强方法的灵活性和可读性,允许同一个方法名处理不同的参数类型或数量。

重写:修改或扩展父类方法的行为,使子类能够以特定的方式响应方法调用。

陈睿mikechen

十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法