重载
重载是指在同一个类中定义多个同名方法,但这些方法具有不同的参数列表。重载的方法可以具有不同的返回值类型,但不能具有相同的参数列表。
语法:
class MyClass {
public void myMethod(int a) {
// 方法体
}
public void myMethod(int a, int b) {
// 方法体
}
public void myMethod(String s) {
// 方法体
}
}
在上面的示例中,myMethod
方法重载了三次:
- 第一个方法接受一个整型参数。
- 第二个方法接受两个整型参数。
- 第三个方法接受一个字符串参数。
重写
重写是指在子类中定义一个与父类中同名且具有相同参数列表的方法。重写的方法必须具有相同的访问权限或更高的访问权限,并且不能具有比父类方法更窄的返回值类型。
语法:
class ParentClass {
public void myMethod() {
// 方法体
}
}
class ChildClass extends ParentClass {
@Override
public void myMethod() {
// 方法体
}
}
在上面的示例中,ChildClass
中的 myMethod
方法重写了 ParentClass
中的 myMethod
方法。
区别
重载和重写之间的主要区别在于:
- 发生位置:重载发生在同一个类中,而重写发生在子类中。
- 参数列表:重载的方法必须具有不同的参数列表,而重写的方法必须具有相同的参数列表。
- 返回值类型:重载的方法可以具有不同的返回值类型,而重写的方法不能具有比父类方法更窄的返回值类型。
何时使用
重载:
- 当需要为同一操作提供不同的功能时。
- 当需要为不同的数据类型提供相同的功能时。
重写:
- 当需要在子类中修改或扩展父类的方法时。
- 当需要为子类提供特定实现时。
注意事项
- 重载的方法不能具有相同的参数列表,即使它们具有不同的返回值类型。
- 重写的方法必须具有相同的参数列表,但可以具有不同的访问权限或更窄的返回值类型。
- 如果子类没有重写父类的方法,则子类将继承父类的方法实现。
- 可以使用
@Override
注解来显式指定方法正在重写父类方法,这有助于避免错误。
结论
重载和重写是 Java 中强大的特性,它们允许开发人员创建更灵活和可重用的代码。重载允许在同一个类中创建具有不同功能或针对不同数据类型的方法,而重写允许在子类中修改或扩展父类的方法。通过理解重载和重写的区别以及何时使用它们,开发人员可以编写更有效和可维护的代码。