overload: 重载,指在同一个class中有多个同名function的现象。
override: 覆写,指ext class中重写base class中的同签名function的行为。
注意,如果ext class继承了base class——假设base class中一个非private非final的work(arg list 1)方法——ext class中同样也会有work(arg list 1)方法。
此时如果在ext class中再添加一个同名function,如work(arg list 2),则是重载行为。
如果添加一个同签名function,即work(arg list 1),则是覆写行为。
方法名与参数列表合称方法签名,是方法的唯一标识。return type不属于方法签名。(3月27日补充:虽然如此,覆写对return type还是有要求的,more details see [#0x000A])
如果base class中的work(arg list 1)方法是private或是final的,那么ext class中是不会有work(arg list 1)方法的,所以无论是添加work(arg list 1)方法或是work(arg list 2)方法,是既不算重载也不算覆写的。
P.S. 重载并不要求有继承,同一个类中也可以有重载行为
P.S.2 静态方法没有覆写机制,如:
class Base {
public static void print() {
System.out.println("Base prints.");
}
}
public class Ext extends Base {
public static void print() {
System.out.println("Ext prints.");
}
public static void main(String[] args) {
Base.print(); // Base prints.
Ext.print(); // Ext prints.
Base b = new Base();
b.print(); // Base prints.
Base b2 = new Ext();
b2.print(); // Base prints.
Ext e = new Ext();
e.print(); // Ext prints.
}
}
尤其需要注意的是b2,这里不像多态机制,静态方法的绑定也是静态的,引用是啥类型,就调用啥类型的静态方法。