我有两节课。 Class2和Class3。 Class2是子类Class3的父类。
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 :(得分:0)
static variables
是那些值对于该类的所有对象都是常量的。它们的任何变化也会反映在其他对象中。
对于非静态变量,对象c
将具有int a
和int b
,即c.a
将为3
,c.b
将是4
。但这些值属于c
;而super
(Class2的另一个对象)的值为a
和b
,即super.a
和super.b
为0
和{{1 }}
使用静态变量时,在创建对象0
时,会将c
和a
初始化为b
和3
,但现在,每个4
的单个对象(包括Class2
)将super
和a
初始化为b
和3
。