java-重载和重写的区别
🎈边走、边悟🎈迟早会好 |
重载(Overloading)和重写(Overriding)是面向对象编程中的两个重要概念,它们用于实现方法的多态性,但作用和使用场景不同。
一、重载(Overloading)
定义:在同一个类中,方法名称相同但参数列表不同的方法即为重载。
特点:
- 方法名称相同:重载的方法必须有相同的名称。
- 参数列表不同:重载的方法必须有不同的参数列表(参数的数量、类型、或者顺序至少有一个不同)。
- 返回类型可以相同也可以不同:重载的方法的返回类型可以相同也可以不同,但仅通过返回类型的不同来区分重载方法是不允许的。
- 适用于构造方法:构造方法也可以重载。
class Example {
void display(int a) {
System.out.println("Argument: " + a);
}
void display(int a, int b) {
System.out.println("Arguments: " + a + ", " + b);
}
void display(double a) {
System.out.println("Argument: " + a);
}
}
二、重写(Overriding)
定义:在子类中,定义一个与父类在方法名称、参数列表和返回类型完全相同的方法,称为重写。
特点:
- 方法名称相同:重写的方法必须与父类中的方法具有相同的名称。
- 参数列表相同:重写的方法必须与父类中的方法具有相同的参数列表。
- 返回类型相同:重写的方法的返回类型必须与父类中的方法相同,或者是其子类型(协变返回类型)。
- 访问权限不能更低:重写的方法的访问权限不能比父类中的方法的访问权限更低。例如,如果父类方法是
public
,那么重写的方法也必须是public
。 - 只能在子类中:重写只能在子类中进行,用于修改父类中的方法实现。
class Parent {
void show() {
System.out.println("Parent's show()");
}
}
class Child extends Parent {
@Override
void show() {
System.out.println("Child's show()");
}
}
三、总结
特点 | 重载(Overloading) | 重写(Overriding) |
---|---|---|
方法名称 | 必须相同 | 必须相同 |
参数列表 | 必须不同 | 必须相同 |
返回类型 | 可以相同或不同 | 必须相同或为其子类型 |
访问权限 | 无特殊要求 | 不能低于父类的方法 |
发生范围 | 同一个类 | 子类与父类之间 |
适用场景 | 提供多种方法实现 | 修改父类方法实现 |
重载用于在同一个类中创建多个方法,这些方法具有相同的名称但不同的参数列表,以提供不同的实现方式。重写用于在子类中提供父类方法的具体实现,以实现多态性和动态绑定。
四、面试
✈️面试时,问:重载(Overload)和重写(Override)的区别?
✈️答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
🌟感谢支持 听忆.-CSDN博客
🎈众口难调🎈从心就好 |