构造器的调用顺序

基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上链接,以使每个 基类的构造器都能得到调用。这样做事有意义的。因为构造器具有一项特殊的任务,检查对象是否被正确的构造,导出类只能访问它自己的成员,不能访问基类的成员,只有基类的构造器才具有恰当的知识和权限来对自己的元素进行初始化。因此必须令所有构造器都得到调用,否则就不可能正确构造完整的对象。

 

 

//: polymorphism/Sandwich.java
// Order of constructor calls.
package polymorphism;
import static net.mindview.util.Print.*;

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();
  }
} /* Output:
Meal()
Lunch()
PortableLunch()
Bread()
Cheese()
Lettuce()
Sandwich()
*///:~

 

1,调用基类构造器,这个步骤会不断的反复递归下去,首先是构造这种层次结构的更,然后是下一层导出类知道最底层的导出类。

2,按照声明顺序调用成员的初始化方法,

3,调用导出类构造器的主体

 

 

你可能感兴趣的:(构造器的调用顺序)