1. (Override)重写的函数:在继承时使用,需要完全同样的signature
在实际执行时调用哪个方法,在run-time时决定,因此其是动态的
若在子类中调用父类的方法,可采用super关键字
2. (Overload)重载:多个方法具有相同的名字,但有不同的参数列表或返回值类型
方便client调用,client可用不同的参数列表,调用同样的函数。
Overloading是一种静态多态:
在编译过程中,根据参数列表进行最佳匹配
进行的是静态类型检查,在编译阶段决定执行哪个方法。
而与之相反,overridden methods则是在run-time进行dynamic checking!
Overload的规则:
a. 一定要有不同的参数列表
b. 可以有相同/不同的返回值类型
c. 可以有相同/不同的public/private/protected关键词修饰
d. 可以声明异常。
e. 可以在同一个类内重载,也可在子类中重载
注意:overload匹配参数时,看的是引用类型,例如:
这里print的是animal而不是horse,因为其根据引用类型进行最佳匹配。