Reihenfolge der Konstruktoraufrufe in mehrstufiger Vererbung in Java [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Java Constructors - Ausführungsreihenfolge in einer Vererbungshierarchie 5 Antworten//: 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()"
});
// */
}
} ///:~
Die Ausgabe dieses Codes ist
Meal()
Lunch()
PortableLunch()
Bread()
Cheese()
Lettuce()
Sandwich()
Da die Felder in einer Klasse in der Reihenfolge erstellt werden, in der sie deklariert wurden, warum nicht
Bread()
Cheese()
Lettuce()
oben angekommen?
Auch was versucht es in diesem Code zu tun?
monitor.expect(new String[] {
"Meal()",
"Lunch()",
"PortableLunch()",
"Bread()",
"Cheese()",
"Lettuce()",
"Sandwich()"
});
uerst dachte ich, es sei eine anonyme Klasse, aber es sieht nicht so aus. Initialisiert es ein String-Array? Warum hat es keinen Namen für die String-Variable? Bitte geben Sie den Namen des hier verwendeten Programmierkonstrukts an.