java中子類繼承父類程式執行順序問題
阿新 • • 發佈:2018-11-15
測試程式碼:
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關鍵子來呼叫父類帶引數的構造方法,否則編譯不能通過。