Overload
Overload是重载,本质是静态分派,根据静态类型为判定依据,发生在编译期。
在java中的体现为:同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同。
重载时应注意:
- 在使用重载时只能通过不同的参数样式。
- 方法的异常类型和数目不会对重载造成影响。
Override
Override是重写,本质是动态分配,根据实际类型为判定依据,发生在运行时。
在java中的体现为:子类中的方法可以与父类中的某个方法的名称和参数完全相同。
重写时应注意:
- 子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解
决父类的一些问题,不能比父类有更多的问题。 - 子类方法的访问权限只能比父类的更大,不能更小。
- 不能重写父类中final修饰的方法
- 如果父类的方法是 private 类型,那么,子类则不存在重写的限制,相当于子类中增加了一个全新的方法。
注:协变返回类型:导出类中被覆盖的方法可以返回基类方法的返回类型的某中导出类型。
例子如下:
public class A {
public Object say(){
return new A();}public String say1(){
return "";}
}class B extends A{
@Overridepublic String say(){
return "";} // 下面的say1)方法报错// The return type is incompatible with A.say1()@Overridepublic Object say1(){
return new A();}
}