//: 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()"
});
// */
}
} ///:~
這段代碼的輸出是爲了構造的多級繼承調用java中
Meal()
Lunch()
PortableLunch()
Bread()
Cheese()
Lettuce()
Sandwich()
由於在類中的字段的順序創建聲明它們,爲什麼不
Bread()
Cheese()
Lettuce()
來到上面的列表頂部?
另外,它在這段代碼中試圖做什麼?
monitor.expect(new String[] {
"Meal()",
"Lunch()",
"PortableLunch()",
"Bread()",
"Cheese()",
"Lettuce()",
"Sandwich()"
});
起初我以爲這是一個匿名類,但它看起來不像它。它初始化一個字符串數組嗎?爲什麼它沒有String變量的名稱?請告訴我這裏使用的編程結構的名稱。
但是,這不是您的功課嗎? –
@ChristianMark這個定義不是作業,我在閱讀Thinking in Java時自己也有同樣的問題。我發現這個問題和答案非常有用:) –