日期:2014-05-20  浏览次数:20660 次

大家帮忙看看这段程序的输出结果,程序好纠结啊
Java code

class Meal {
  Meal() { print("Meal()"); }
}

class Bread {
  Bread() { print("Bread()"); }
}

class Cheese {
  Cheese() { print("Cheese()"); }
}

class Lettuce {
  Lettuce() { print("Lettuce()"); }
}

class Lunch extends Meal {
  Lunch() { print("Lunch()"); }
}

class PortableLunch extends Lunch {
  PortableLunch() { print("PortableLunch()");}
}

public class Sandwich extends PortableLunch {
  private Bread b = new Bread();
  private Cheese c = new Cheese();
  private Lettuce l = new Lettuce();
  public Sandwich() { print("Sandwich()"); }
  public static void main(String[] args) {
    new Sandwich();
  }
}



------解决方案--------------------
System.out.print
------解决方案--------------------
是不是:
Meal()
Lunch()
PortableLunch()
Bread()
Cheese()
Lettuce
Sandwich()
------解决方案--------------------
可以看看:
http://wenwen.soso.com/z/q191435823.htm


------解决方案--------------------
这个 你自己 考虑一下 初始化的 顺序吧 
 
父类构造函数的调用是在调用 子类的构造函数的时候 开始的 ,
父类的构造顺序 跟子类是一致的

构造顺序 一般 就是

1.成员变量 
2.包括静态变量和静态数据块,
3.然后构造函数 
4.赋值问题 

我自己总结的 求大神 指正
------解决方案--------------------
加载一个类时,先看有没有父类,如果有的话先加载父类,而加载一个类的顺序是静态代码块,静态属性,属性,构造方法,父类加载完后子类也按照这种顺序加载。这样就有了上面的结果。。。