构造函数调用顺序

      在java类中,其数据成员会在几乎任何函数(除静态以外 )包括构造函数之前被初始化。在多层继承关系中成员的初始化会让人迷惑,然而当明白了如下的道理,则一切都会明朗起来。

1.构造函数的调用顺序(多层继承中):子类的构造函数一定会调用父类的构造函数。这个步骤会反复递归,使继承阶层的根源最先被建构,然后使次一层的derived class,直至最末一层的derived class为止。

2.类内部根据各个成员的顺序初始化。

3.调用本类自己的构造函数。

下面的这个程序示例可以帮助很好的理解这几点.。

/**
 * @author czht make time 2006-9-25
 * @version 1.0
 */

public 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()");
 }
}
class Sandwich extends PortableLunch
{
 Bread b = new Bread();
 Cheese c = new Cheese();
 Lettuce l = new Lettuce();
 Sandwich()
 {
  System.out.println("Sandwitch()");
 }
 public static void main(String[] args)
 {
  new Sandwich();
 }
}

其输出结果如下:

Meal()
Lunch()
PortableLunch()
Bread()
Cheese()
Lettuce()
Sandwitch()

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