order de llamadas de constructor en herencia multinivel en java [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Java Constructors - Orden de ejecución en una jerarquía de herencia 5 respuestas
//: 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()"
    });
    // */
  }
} ///:~

La salida de este código es

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

Dado que los campos de una clase se crean en el orden en que se declaran, ¿por qué no

Bread()
Cheese()
Lettuce()

come en la parte superior de la lista anterior?

Además, ¿qué está tratando de hacer en este código?

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

Al principio pensé que era una clase anónima, pero no lo parece. ¿Está inicializando una matriz de cadenas? ¿Por qué no tiene el nombre de la variable String? Por favor, dígame el nombre de la construcción de programación que se utiliza aquí.