【发布时间】:2013-07-22 07:05:52
【问题描述】:
//: 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()"
});
一开始我以为是匿名类,但看起来不像。它是在初始化一个字符串数组吗?为什么它没有字符串变量的名称?请告诉我这里使用的编程结构的名称。
【问题讨论】:
-
但这不是你的功课吗?
-
@ChristianMark 这绝对不是家庭作业,我在阅读 Java 思维时自己也有同样的问题。我发现这个问题和答案非常有用:)
标签: java inheritance constructor