Java Constructors - Order of execution in an inheritance hierarchy

后端 未结 5 1214
予麋鹿
予麋鹿 2020-12-15 17:49

Consider the code below

  class Meal {
    Meal() { System.out.println(\"Meal()\"); }
  }

  class Bread {
    Bread() { System.out.println(\"Bread()\"); }
          


        
5条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-15 18:25

    These are instance fields

    private Bread b = new Bread();
    private Cheese c = new Cheese();
    private Lettuce l = new Lettuce();
    

    They only exist (execute) if an instance is created.

    The first thing that runs in your program is

    public static void main(String[] args) {
         new Sandwich();
    }
    

    Super constructors are called implicitly as the first thing in each constructor, ie. before System.out.println

    class Meal {
        Meal() { System.out.println("Meal()"); }
    }
    
    class Lunch extends Meal {
        Lunch() { System.out.println("Lunch()"); }
    }
    
    class PortableLunch extends Lunch {
        PortableLunch() { System.out.println("PortableLunch()");}
    }
    

    After the super() calls, instance fields are instantiated again before the constructor code.

    The order, reversed

    new Sandwich(); // prints last
    // the instance fields
    super(); // new PortableLunch() prints third
    super(); // new Lunch() prints second
    super(); // new Meal(); prints first
    

提交回复
热议问题