據我所知,沒有辦法在Java中反思地瞭解你的「子類」。難道一個更好的解決方案是創建一個B必須實現的抽象方法,並調用它嗎?
public class A {
//other stuff here
protected void abstract mySubMethod();
//other stuff here
}
編輯: 如果我誤解了你的問題,你真的想知道關於父類,然後是:getDeclaredFields()是使用,如其他海報中提到的正確方法反光。
附加編輯: 我不想讓修改此答案,但... 在一般情況下,如果你試圖給訪問父類中,「正確」和「面向未來」的方式做這是爲了創建抽象方法,這些抽象方法是getter或setters(如果需要,甚至更復雜),然後讓孩子們尊重或不尊重,並在適當的時候作出迴應。
話雖這麼說,你可以做一些像其他人說:
getClass().getParentClass().getDeclaredFields()
然而,這只是如果C總是直接從B.思考繼承工作是由它的本質來說,棘手和具體。我必須在我正在進行的一個項目上做很多工作(不要問,相信我,你不想知道),並儘可能避免它。除非A有充分理由需要受保護的字段,並且正在發現關於它們的信息,否則您可能想要使用抽象方法。我也會提出,你可以用一種抽象方法解決另一個問題,但它可能有點困難。
只是所以我相信我明白 - 你想調用A的子類的方法,對吧?即B從A繼承,並且你希望A調用B上的方法? – aperkins 2010-01-31 15:54:02
好吧,具體而言,我想動態地訪問在A中定義的方法B上定義的字段,但該類的聲明類型是C. – roufamatic 2010-01-31 16:13:10
我不明白你想要面向未來,如果反射總是引用與B?類相同,B在編譯時是否已知?如果你的繼承鏈中的哪個類不是它的位置,你如何辨別它是哪個類? – josefx 2010-01-31 16:14:43