我最近一直在学习Java课程,我们正在处理程序输出,编译错误等。我自己尝试了不同的代码,而实验中的一件事确实让我感到困惑:首先,主要方法如下:
public static void main(String[] args){
A a = new A();
B b = new B();
A ab = new B();
System.out.println(a.a + " " + b.a + " " + ab.a);
}
现在我尝试了这些不同的版本:
//1
public class A {
public static int a = 1;
public A() {
a = 11;
}
}
public class B extends A {
public static int a = 2;
public B(){ a = 22;}
}
//------------
//2
public class A {
public int a = 1;
public A() {
a = 11;
}
}
public class B extends A {
public static int a = 2;
public B(){ a = 22;}
}
//--------------
//3
public class A {
public static int a = 1;
public A() {
a = 11;
}
}
public class B extends A {
public B(){ a = 22;}
}
//-----------
//4
public class A {
public int a = 1;
public A() {
a = 11;
}
}
public class B extends A {
public B(){ a = 22;}
}
输出如下:
11 22 11
] >>11 22 11
3:11 22 22
虽然我能理解输出1、2、3和4确实让我感到困惑。
对于3:B中的a = 22
,更改A对象ab的a的值,因为在b中没有再次声明int a?对于4:如果A中的int a
不是静态的,并且a是类型A的对象,为什么a.a的值为b.a?当我将int a设置为非静态时,在4中会发生什么?提前感谢!
[我最近一直在学习Java课程,我们正在处理程序输出,编译错误等。我自己尝试了不同的代码,而实验中的一件事确实让我感到困惑:...
情况3:当A ab = B()执行B的构造函数时,在A中设置静态变量a,使其值为22。