這可能是一個奇怪的問題,但我不明白我是如何設法實現這個功能的。我的意圖是從覆蓋該領域的對象訪問超級領域。首先,做什麼工作(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
投地美孚返回b.super對象的引用? - 在
main
,我會想到b.super
將是對實例化對象「b」的超級引用的引用。有沒有辦法從包含對象訪問對超級對象的引用?可能來自反射,但我不想訪問.class對象(b.getClass().getSuper()
),而是包含在b中的實例化的Foo。 - 爲什麼
return.super
不返回對b.super對象的引用?
底線:不給同一個名字在超類和子類字段,你會避免頭痛。 – NPE 2013-04-07 08:07:03