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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值