-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) –