1. 程式人生 > >java中子類繼承父類程式執行順序問題

java中子類繼承父類程式執行順序問題

測試程式碼:

package test;

public class FatherTest {
	private String name;
	public FatherTest(){
       System.out.println("--父類的無參建構函式--");
    }
	public FatherTest(String name){
       this.name=name;
       System.out.println("--父類的有參建構函式--"+this.name);
    }
    static{
       System.out.println("--父類的靜態程式碼塊--");
    }
    {
    	System.out.println("--父類的非靜態程式碼塊--");
    }
    public void speak(){
       System.out.println("--父類的方法--");
    }
	//加入一個main程式後
    public static void main(String[] args) {
       System.out.println("--父類主程式--");    
       FatherTest father=new FatherTest("父親的名字");
       father.speak();
    }
}
package test;

public class SonTest extends FatherTest {
    private String name;
    static{
      System.out.println("--子類的靜態程式碼塊--");
    }
    {
       System.out.println("--子類的非靜態程式碼塊--");
    }
    SonTest(){
       System.out.println("--子類的無參建構函式--");
    }
    SonTest(String name){
       this.name=name;
       System.out.println("--子類的有參建構函式--"+this.name);
    }
    @Override
    public void speak(){
       System.out.println("--子類Override了父類的方法--");
    }  
	//然後再加入一個main函式
	public static void main(String[] args) {
	       System.out.println("--子類主程式--");
	       FatherTest father=new FatherTest("父親的名字");
	       father.speak();
	       SonTest son=new SonTest("兒子的名字");
	       son.speak();
	}
}


總結:

1.只有一個類時:靜態程式碼塊>主程式>非靜態程式碼塊,接下來順序執行main裡邊的語句 2.子類繼承父類時: 靜態程式碼塊內容最先執行(只執行一次),當然父類的靜態程式碼塊一定先於子類的靜態程式碼塊執行,接著執行父類非靜態程式碼塊和構造方法,然後執行子類非靜態程式碼塊和構造方法。 注意:子類的構造方法,不管這個構造方法帶不帶引數,預設的它都會先去尋找父類的不帶引數的構造方法。如果父類沒有不帶引數的構造方法,那麼子類必須用supper關鍵子來呼叫父類帶引數的構造方法,否則編譯不能通過。