我有两个类:TestClass2和TestClass3。 TestClass3扩展了TestClass2。
public class TestClass2 {
static int i=10;
static int k=TestClass3.j+100;
}
public class TestClass3 extends TestClass2{
static int j=20;
}
现在当我在另一个班级打印时:
public static void main(String[] args) {
System.out.println(TestClass3.j);
System.out.println(TestClass2.k);
}
我得到的结果是20和100
但是当我仅打印TestClass2.K(如下所示)时,结果为120。
public static void main(String[] args) {
System.out.println(TestClass2.k);
}
有人可以解释为什么会这样吗?
最佳答案
让我们看一下下面的Java程序。
public class Inheritance {
static class TestClass2 {
static int i=10;
static int k=TestClass3.j+100;
static
{
System.out.println("TestClass2 class : " + k);
System.out.println("TestClass3 j : " + TestClass3.j);
}
}
static class TestClass3 extends TestClass2{
static int j=20;
static
{
System.out.println("TestClass3 class : " + j);
}
}
public static void main(String[] args) {
System.out.println(TestClass3.j);
System.out.println(TestClass2.k);
}
}
输出类似于:
TestClass2 class : 100
TestClass3 j : 0
TestClass3 class : 20
20
100
当TestClass3被TestClass2继承时,将首先初始化TestClass2。
如您所见,控制台消息中,我们有一个像这样的继承树:
TestClass2> TestClass3
因此,TestClass3的静态/类变量j作为默认值将为零,因此输出必须为100。
注释main方法中的第一行代码,然后我们可以看到下一个结果;
TestClass3 class : 20
TestClass2 class : 120
TestClass3 j : 20
120
在这种情况下,分别对TestClass 2的类变量k和TestClass 3的类变量j进行初始化。
因此,现在我们有120个输出。