子類繼承父類(父類和子類裡:塊、靜態塊、構造和方法覆寫)之間呼叫順序

中國風2012發表於2014-07-24
package test01;

 class Persion {
	public Persion(){
		show();	// 第四呼叫(它會呼叫子類覆寫過的 show() 方法)
	}
	public void show(){
		System.out.println("Persion show");
	}
	{	// 第三呼叫
		System.out.println("Persion's no static block");
	}
	static{	// 第一呼叫
		System.out.println("Persion's static block");
	}
}
public class Child extends Persion{
	public Child(){
		show();	// 第六呼叫(它會呼叫子類的 show() 方法)
	}
	public void show(){
		System.out.println("Child show");
	}
	{	// 第五呼叫
		System.out.println("Child's no static block");
	}
	static{	// 第二呼叫
		System.out.println("Child's static block");
	}
	public static void main(String[] args){
		new Child();
	}
}

執行結果:

Persion's static block
Child's static block
Persion's no static block
Child show
Child's no static block
Child show
PS:所有類的 static 塊會首先呼叫,其次呼叫 普通塊,然後呼叫構造。

相關文章