重载(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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》