Java的多态之重载(Overload)和覆盖(Override)

/ 0评 / 0

1. 方法重载(Overload)

名字相同,参数不同。返回类型可以相同也可以不同,不影响编译器判断(即编译器不会考虑返回值,只看参数)。
静态的,编译期间决定调用哪个方法;
只与句柄的类型有关,而与对象的实际类型无关;如果没有完全匹配参数的同名方法选择,会发生编译错误。

-
2. 方法覆盖 (Override)

外壳不变,核心重写!
动态的,只能在运行期间才能决定调用哪个方法 ;
最终调用的方法,只与对象的实际类型有关,而与句柄类型无关;
不能覆盖private, final和static方法,一个包内可见的方法不能被另一个包的类覆盖;


可以看到overload注重的是句柄,而override注重的是对象类型。所以说:

A static method can be overloaded, but cannot be overriden.

另外注意,Override发生在runtime。Overloading发生在compile time。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注