overload and override: 重载与覆写

Yao Yao on March 23, 2009

  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 关于覆写方法的return type)

  如果 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. 静态方法没有覆写机制,如:

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,这里不像多态机制,静态方法的绑定也是静态的,引用是啥类型,就调用啥类型的静态方法。



blog comments powered by Disqus