Java 重写(Override)与重载(Overload)
Java中的方法既可以重写(Override)也可以重载(Overload)。这两个概念常常混淆,但它们是Java语言中非常重要的内容。
1. 重写(Override)
重写(Override)是指子类定义了一个与父类相同名称、参数类型也相同的方法,用于完全重写父类的实现。子类在调用该方法时,将执行该方法的子类实现,而不是父类中的实现。
重写方法的签名必须与被重写方法的签名相同,包括返回类型、方法名、参数列表、抛出的异常类型。但重写方法有更多灵活性,因为它可以具有父类方法的功能,也可以有自己的功能。因此,它被视为多态的一个重要机制。
重写方法示例:
class MyParent {
public void showMessage() {
System.out.println("Parent Method!");
}
}
class MyChild extends MyParent {
public void showMessage() {
System.out.println("Child Method!");
}
}
public class Test{
public static void main(String[] args) {
MyChild obj = new MyChild();
obj.showMessage();
}
}
输出结果为:Child Method!
2. 重载(Overload)
重载(Overload)是指定义了多个相同名称但参数列表不同的方法,用于处理不同的任务。当调用重载方法时,编译器将根据调用的参数类型和数量来决定使用哪个版本的方法。
重载方法的方法名必须相同,但参数列表必须不同。参数列表可以由参数的数量、类型或顺序来确定。返回类型可以相同,也可以不同。当在同一类中定义多个相同名称和不同参数列表的方法时,称其为方法重载。
重载方法示例:
class MyClass {
public int add(int x, int y){
return x + y;
}
public int add(int x, int y, int z) {
return x + y + z;
}
}
public class Test{
public static void main(String[] args) {
MyClass obj = new MyClass();
System.out.println(obj.add(10, 20));
System.out.println(obj.add(10, 20, 30));
}
}
输出结果为:
30
60
区别
重写和重载在方法实现方面有些不同,重写是在父类的方法已经被实现的情况下,在子类中进行重新实现或修改。重载是在同一个类中实现的,通过不同参数列表实现方式的不同。
另一个区别是,重写只能对原来存在的方法覆盖,而重载是在同一类中定义多个相同名称和不同参数列表的方法。重写改变了原来方法的实现,而重载仅使方法更灵活,使用时能根据指定的参数计算出期望的值。理解这两种方法,可以更好地使用Java类库,并为您的代码添加更多的功能和灵活性。
总之,重载和重写是Java编程中两个必需的特性。使用这两种技术,可以实现更好的控制和实现更多的灵活性.