-4
我有两个类。 Class2和Class3。 Class2是子类Class3的父类。Java继承:静态变量混淆
package package1;
public class Class2 {
public static int a, b;
public void add() {
System.out.println("the sum is =" + (a + b));
}
public void product() {
System.out.println("the product is " + (a * b));
}
public Class2() {
System.out.println("class 2 constructor");
}
public Class2(int a, int b) {
this.a = a;
this.b = b;
}
}
而对于Class3的代码是
package package2;
import package1.*;
public class Class3 extends Class2 {
public Class3(){
//super(3,4);
call();
System.out.println(super.a);
System.out.println(b);
System.out.println("class 3 constructor");
}
public void call(){
Class2 c=new Class2(3,4);
super.add();
super.product();
}
public void add(){
System.out.println("child class add method");
}
}
上面的代码工作正常,并输出
class 2 constructor
the sum is =7
the product is 12
3
4
class 3 constructor
问题:当我做父类变量非静态,然后该值未初始化结果如下所示
class 2 constructor ,
the sum is =0
the product is 0
0
0
class 3 constructor.
虽然保持变量非静态,如果我使用super()在子类中调用父类构造函数,那么它会给出结果。 这个问题的原因是什么,我该如何解决?
目前尚不清楚问题所在。只有初始化变量时,变量才会有(非0)值。 – Eran
我认为你错过的一点是,虽然'Class3'对象***是***'Class2'对象,在'call'方法中创建了完全不同的'Class2'对象。因此,如果这些字段不是“静态”,那么您在该创建的对象中获得的副本与您在其中调用该方法的“Class3”对象中的副本不同。 –
[Java中的静态变量]的可能重复(https://stackoverflow.com/questions/12506082/static-variable-in-java) –