据我所知,没有办法在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