java为什么程序稍后会输出代码中的其他内容?
class A { int x = 1; }
class B extends A { }
class C extends B { int x = 2;}
public class classTest {
public static void main(String[] args) {
A w = new A(); System.out.println(w.x);
B u = new B(); System.out.println(u.x);
C v = new C(); System.out.println(v.x);
A [] a = { new A(), new B(), new C()};
for (int i=0; i<3; ++i)
System.out.println(a[i].x);
}
}
对于这个,它会打印出:
1
1
2
1
1
1
为什么作为Class C
一部分的变量v
每次运行时都会输出不同的变量?例如,在C v = new C(); System.out.println(v.x);
中,它输出2
,并在中的最后一个循环中:
for (int i=0; i<3; ++i)
System.out.println(a[i].x);
}
它会打印出1
?为什么运行Class C
的第一个输出不是1
,因为它扩展了它,所以x
将等于2
,但随后将被运行x = 1
的Class B
的x等于1
覆盖
我在大学里学习课程,我们几乎不涉及这个话题
多谢各位
# 1 楼答案
这是由您声明类型A的数组生成的,那么所有对象都将属于此类型。和类类型A返回1。 也许您应该使用接口或抽象类