【发布时间】:2020-10-01 11:50:36
【问题描述】:
class A {
public int a = 100;
}
class B extends A {
public int a = 80;
}
class C extends B {
public int a = 10;
public void show() {
int a = 0;
System.out.println(a);
System.out.println(super.a);
System.out.println(((A) this).a);
}
}
((A) this).a 行中的System.out.println(((A) this).a); 做什么?
是向上/向下转换this还是这里发生了其他事情?
我还尝试了System.out.println(this); 和System.out.println((A)this);,它们都有相同的输出。这里到底发生了什么?
【问题讨论】:
-
System.out.println(this);和System.out.println((A)this);有效地调用对象实例的toString。方法相互覆盖,因此输出将始终相同。 -
@Robert 好的,但
println在这些示例中没有this或(A)this作为参数。 -
(A) this只是将this转换为A。所以((A) this).a将首先将this转换为A,然后按照类A中的定义查找a。它应该打印 100。 -
字段“覆盖”(有真正的字段覆盖是否更隐藏)与方法覆盖完全不同:stackoverflow.com/questions/9414990/…
-
"我也试过 System.out.println(this); 和 System.out.println((A)this); ..." 方法有动态调度。字段不
标签: java class inheritance this