这可能是一个奇怪的问题,但我不明白我是如何设法让它工作的。我的意图是从覆盖该字段的对象访问超级字段。首先,什么工作(1):
class Foo {
protected int i = 0;
}
public class Bar extends Foo {
int i = 1;
Foo f() {
return this;
}
public static void main (String[] args) {
Bar b = new Bar();
System.out.println(b.i);
System.out.println(b.f().i);
}
}
我首先尝试使用类似(2)的东西:
System.out.println(b.super.i);
这没有用。然后我尝试使用(3):
Foo f() {
return super;
}
那也没有用。
所以,参考上面编号的部分:
- 为什么
return this
强制转换为 Foo 返回对 b.super 对象的引用? - 在
main
中,我会认为b.super
是对实例化对象 "b" 的超级引用的引用。有没有办法从包含对象访问对超级对象的引用?也许来自反射,但我不想访问 .class 对象(b.getClass().getSuper()
),而是包含在 b 中的实例化 Foo。 - 为什么不
return.super
返回对 b.super 对象的引用?