title: Java Constructors - Order of execution in an inheritance hierarchy
body: <p>Consider the code below</p>
  
  <pre><code>  class Meal {
      Meal() { System.out.println("Meal()"); }
    }
  
    class Bread {
      Bread() { System.out.println("Bread()"); }
    }
  
    class Cheese {
      Cheese() { System.out.println("Cheese()"); }
    }
  
    class Lettuce {
      Lettuce() { System.out.println("Lettuce()"); }
    }
  
    class Lunch extends Meal {
      Lunch() { System.out.println("Lunch()"); }
    }
  
    class PortableLunch extends Lunch {
      PortableLunch() { System.out.println("PortableLunch()");}
    }
  
    class Sandwich extends PortableLunch {
      private Bread b = new Bread();
      private Cheese c = new Cheese();
      private Lettuce l = new Lettuce();
      public Sandwich() {
        System.out.println("Sandwich()");
      }
      public static void main(String[] args) {
        new Sandwich();
      }
    } 
  </code></pre>
  
  <p>Based on my understanding of class member initialization and order of constructor execution. I expected the output to be </p>
  
  <pre><code>Bread()
  Cheese()
  Lettuce()
  Meal()
  Lunch()
  PortableLunch()    
  Sandwich()
  </code></pre>
  
  <p>as i believe the class members were initialized even before the main method was called. However I had the below output when i ran the program </p>
  
  <pre><code>Meal()
  Lunch()
  PortableLunch()
  Bread()
  Cheese()
  Lettuce()
  Sandwich()
  </code></pre>
  
  <p>my confusion is whey the Meal() Lunch() and PortableLunch() run before Bread() Cheese() and Lettuce() even though their constructors where called after.</p>