代码如下,从书上截得,
package chapter8;import chapter8.Lunch.PortableLunch;class Meal {
Meal(){
System.out.println("Meal()");
}
}class Bread {
Bread(){
System.out.println("Bread()");
}
}class Lunch extends Meal {
Lunch (){
System.out.println("Lunch ()");
}class PortableLunch extends Lunch {
PortableLunch() {
System.out.println("PortableLunch()");
}
}
}public class Sandwich extends PortableLunch{
private Bread b = new Bread();
private Sandwich(){System.out.println("Sandwich()");}
public static void main(String[] args) {
new Sandwich();
}}请高手解释下,这个初始化顺序, 构造器-->成员变量-->导出类的构造主体
JVM 这样 实现的原理是什么? 小弟在此谢过!!
package chapter8;import chapter8.Lunch.PortableLunch;class Meal {
Meal(){
System.out.println("Meal()");
}
}class Bread {
Bread(){
System.out.println("Bread()");
}
}class Lunch extends Meal {
Lunch (){
System.out.println("Lunch ()");
}class PortableLunch extends Lunch {
PortableLunch() {
System.out.println("PortableLunch()");
}
}
}public class Sandwich extends PortableLunch{
private Bread b = new Bread();
private Sandwich(){System.out.println("Sandwich()");}
public static void main(String[] args) {
new Sandwich();
}}请高手解释下,这个初始化顺序, 构造器-->成员变量-->导出类的构造主体
JVM 这样 实现的原理是什么? 小弟在此谢过!!
解决方案 »
- 求助,一个关于List的问题!!!
- 关于java.lang.String的equals和hashCode方法的问题
- 关于继承方面的问题困扰了我好久,好久,请高手帮助指点指点,谢谢谢谢!
- 了解sip的朋友来帮助一下!UP有分!
- 千古奇观,为什么会插不进去呢,并且不报任何错误。。。
- java可以开发word这样的软件吗?
- 为和我写的java程序会占用全部的cpu资源,如何做到尽量少占资源?
- 谁有《网络机器人Java编程指南》一书的源代码(急用!!!1)
- 高手请详细谈谈电子商务中间件weblogic/websphere等的性能和易开发性的比较?
- 什么是erp?
- 声明时抛出异常和语句块中抛出异常有啥区别?
- timer事件每隔N秒被触发 一次怎么做
所以该程序应该是首先调用PortableLunch的构造并加载这个类,然后调用 Sandwich 的构造,在调用 Sandwich 的构造的时候 Sandwich 类会被加载,既初始化private Bread b ,所以执行System.out.println("Bread()",然后执行 System.out.println("Sandwich()")
以上,参照Thinking in Java
比如:
在PortableLunch里加上 protected String str = null;
在PortableLunch()里加上 str = "str";
在Sandwich 里加上private String s = this.str;
所以要先构造父类,子类就可以安全地访问父类的成员.3,当前类的成员变量,因为本身类的构造函数可能访问成员变量.4,执行构造函数体.
比如:
在PortableLunch里加上 protected String str = null;
在PortableLunch()里加上 str = "str";
在Sandwich 里加上private String s = this.str;
所以要先构造父类,子类就可以安全地访问父类的成员.3,当前类的成员变量,因为本身类的构造函数可能访问成员变量.4,执行构造函数体.