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


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

  • FatherTest.java

      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();
      }
      }
    
  • 結果:

  • 執行順序:靜態代碼塊—主程序—非靜態代碼塊—構造函數—一般方法。

  • SonTest.java

      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();
      }
      }
    
  • 結果:

  • 加入了子類以后,執行順序有了新的變化,我們可以總結一下。首先第一部分執行的是父類的靜態代碼塊—子類的靜態代碼塊—主程序。這一部分都是執行一次,與建立多少對象沒有關系。第二部分new了一個父類對象,並調用了方法。執行了它的非靜態代碼塊—構造函數—一般方法。第三部分new了一個子類的對象,並調用了方法。執行順序為父類的非靜態代碼塊—父類的無參構造函數,然后是子類的非靜態代碼塊—子類構造函數—子類的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM