【发布时间】:2018-12-23 03:04:11
【问题描述】:
我有这段代码,我的问题是,静态变量 z 的值是否在子类之间“共享”?具体:当我声明b时,这是否意味着首先使用A的构造函数并将z的修改值传递给B的构造函数?
public class Test {
public static void main(String[] args){
A a = new A();
System.out.println("A: " + a.x);
a.print();
A b = new B();
System.out.println("B: " + b.x);
a.print();
}
}
public class A {
public static int z; // default: 0
public int x = 10;
public A() {
x++;
z++; // z = 1
}
print(){
System.out.println("A: "+ x);
System.out.println("A: "+ ++z); // z = 2
}
}
public class B extends A {
public int x = 100;
public B() {
x++;
z++; //z is not 3. z = 4 (because of the constructor of A that
uses the modified values of z?)
}
public void print() {
System.out.println("B: "+ x);
System.out.println("B: "+ ++z); // z = 5
}
}
输出是:
A:11 A:11 A:2 B:11 B:102 B:5
这些值是否传递给子类,因为 z 是静态的,这意味着如果我更改它的值,如果我不通过在 A 中传递另一个具体值来更改 z,它们将在运行我的代码时被更改?
我很困惑。希望有人能给我解释一下。
【问题讨论】:
-
不涉及继承:是同一个字段
-
如果您使用您的调试器逐行逐行执行代码,或者您只是将 println() 日志添加到代码中,您就会知道会发生什么。
-
输出应该是 A: 11 A: 11 A: 2 B: 11 B: 101 B: 5。你需要了解两个主题:1.初始化和实例化的顺序。 2.字段隐藏。
标签: java inheritance static-variables