Override:
① 用于子类覆盖父类的方法,一般在子类中标注。
② 子类中此方法必须与父类中此方法完全相同,相同的参数列表,相同的返回类型,抛出的异常完全相同。
③ 方法被定义为final 不能被覆盖。
④ 方法的权限为private 不能覆盖重写。
Overload:
① 在重载时,只能通过不同的参数样式进行重载(不同的参数类型,参数个数,参数顺序)。
② 不能通过返回类型,抛出异常的类型,访问权限来重载
③ 方法异常的数目和类型不能作为重载的依据。
④ 重载是发生在同一个类中,不同方法之间。
其具体实现机制:
override是重写,重写是一种动态绑定的多态机制。即在父类和子类中同名元素(如成员函数)有不同 的实现代码。执行的是哪个代码是根据运行时实际情况而定的。
overload是重载,重载是一种参数多态机制,即代码通过参数的类型或个数不同而实现的多态机制。 是一种静态的绑定机制(在编译时已经知道具体执行的是哪个代码段)。
package OverrideOverloadTest;
class A{
public int getVal(){
return (5);
}
}
class B extends A{
public int getVal(){
return (10);
}
}
class C extends A{
public int getVal(int val){
return val;
}
}
public class override {
public static void main(String[] args){
B b = new B();
A a1 = (A)b;
C c = new C();
A a2 = (A)c;
System.out.println(a1.getVal());
System.out.println(b.getVal());
System.out.println(a2.getVal());
System.out.println(c.getVal());
System.out.println(c.getVal(6));
}
}
结果:10,10 ,5, 5, 6, 6.6