java - java初始化/实例化派生类的类变量和基类构造函数的调用

  显示原文与译文双语对照的内容
56 0

我想找出在这里代码段中调用基类构造函数的派生类变量 2的1 ) 初始化/instatiation的顺序。


public class base 


{


 int y = 1;


 public base()


 { 


 y = 2; 


 function();


 }


 void function () 


 {


 System.out.println("In base Value =" + String.valueOf(y));


 }



 public static class derived extends base 


 {


 int y = 3;


 public derived()


 { 


 function();


 }


 void function () 


 {


 System.out.println("In derived Value =" + String.valueOf(y));


 }


 }


 public static void main(String[] args) 


 { 


 base b = new base.derived();


 return;


 }


}



我的understadning是首先,派生类是 instatiated,然后调用基类构造函数,然后初始化派生类变量y 。 这个订单正确?

时间: 原作者:

50 2

执行顺序按以下方式发生:

1 ) static 初始值设定项

[Base class instantiation ]

2 ) 实例初始值设定项

3 ) 构造函数

4 ) 主要部分的其余部分。

static initialisers位于基类实例前面。

如果有 1个实例 initialiser,它们按照从上到下写的顺序发生。

你的代码

你没有任何实例块。

父类构造函数首先设置为 2,然后调用函数方法,然后在子类中重写函数方法。

但是,derived.y 变量还没有初始化,因此y的值默认为 0.

然后运行,类,将 derived.y的值声明为 3,在派生类中定义的重写函数方法为 3 。

注:两个y 变量不相同。

...