`

[#0x0005] overload and override: 重载与覆写

    博客分类:
  • Java
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics