порядок вызова конструктора в многоуровневом наследовании в java [duplicate]

На этот вопрос уже есть ответ:

Java Constructors - Порядок выполнения в иерархии наследования 5 ответов
//: c07:Sandwich.java
// Order of constructor calls.
// package c07;
// import com.bruceeckel.simpletest.*;

import java.util.*;

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()");}
}

public class Sandwich extends PortableLunch {
//  private static Test monitor = new Test();
  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();
   /*
   monitor.expect(new String[] {
      "Meal()",
      "Lunch()",
      "PortableLunch()",
      "Bread()",
      "Cheese()",
      "Lettuce()",
      "Sandwich()"
    });
    // */
  }
} ///:~

Выход этого кода

Meal()
Lunch()
PortableLunch()
Bread()
Cheese()
Lettuce()
Sandwich()  

Поскольку поля в классе создаются в порядке их объявления, почему бы не

Bread()
Cheese()
Lettuce()

оказаться в верхней части списка выше?

Кроме того, что он пытается сделать в этом коде?

   monitor.expect(new String[] {
      "Meal()",
      "Lunch()",
      "PortableLunch()",
      "Bread()",
      "Cheese()",
      "Lettuce()",
      "Sandwich()"
    });  

Сначала я подумал, что это анонимный класс, но на него это не похоже. Это инициализация массива String? Почему у него нет имени для переменной String? Скажите, пожалуйста, название используемой здесь конструкции программирования.

Ответы на вопрос(4)

Ваш ответ на вопрос