我有两个班级A
和B
。
问题:为什么行System.out.println(b.x)
会打印23?
我同意22作为结果,因为A
的构造函数和B
的构造函数都将static int y
递增1.
public class A {
public long x = 0;
public static int y = 20;
public A(float x) {
this((int) x );
A.y++;
}
public A(int x) {
this.x = x;
}
public int f(double d) {
return 1;
}
public int f(long l) {
return 2;
}
}
public class B extends A {
public int x = 1;
public B() {
this(42);
B.y++;
}
public B(int x) {
super(x + 0.f);
this.x += this.x;
}
public int f(long l) {
return 3;
}
public int f(float f) {
return 4;
}
}
public class M {
public static void main(String[] args) {
A a = new A(10f);
System.out.println(a.x);
System.out.println(A.y);
B b = new B();
System.out.println(((A b).x); // 23
}
答案 0 :(得分:4)
b.y
为23
,因为B
构造函数也使用A
调用super(x + 0.f);
构造函数。
因此y
增加3次,A a = new A(10f);
增加1次,B b = new B();
增加2次
答案 1 :(得分:1)
首先我相信你想把这行代码写成 System.out.println(((A b).y); // 23
而不是
System.out.println(((A b).x); // 23
所以我的解释是:
在M级系列中正在进行调用,这使得你的b.y打印23
20 - > 21 强>