函数重写(Override)和函数重载(Overload)有以下重要区别:
1. 定义位置不同:
- 函数重写发生在具有继承关系的子类和父类之间。
- 函数重载可以发生在同一个类中。
2. 方法签名要求不同:
- 重写要求方法名、参数列表和返回类型都必须与父类中被重写的方法完全相同(返回类型可以是协变类型)。
- 重载要求方法名相同,但参数列表(参数的类型、个数、顺序)不同。
3. 访问权限限制不同:
- 重写的方法不能比父类中被重写的方法有更严格的访问权限。
- 重载对方法的访问权限没有特殊要求。
4. 异常处理不同:
- 重写的方法不能抛出比父类中被重写方法更多的异常。
- 重载对异常没有限制。
下面是一些示例来说明:
函数重载示例:
class OverloadingExample {
void print(int num) {
System.out.println("Integer: " + num);
}
void print(String str) {
System.out.println("String: " + str);
}
void print(double num) {
System.out.println("Double: " + num);
}
}
在这个示例中,print
方法被重载了三次,根据传入参数的类型不同执行不同的操作。
函数重写示例:
class Parent {
void display() {
System.out.println("Parent's display");
}
}
class Child extends Parent {
@Override
void display() {
System.out.println("Child's display");
}
}
在这个示例中,子类 Child
中的 display
方法重写了父类 Parent
中的 display
方法。