2012-03-20 72 views
7

我在一个子类里面,当我试图找到超类的名字时,我尝试了super.getClass(),但它返回了我的名字仅子类。 为什么?为什么在子类中的super.getClass()返回子类名称

+0

也许添加一些代码和样本输出? – smessing 2012-03-20 15:53:19

+0

可能重复[如何获得父级基类对象super.getClass()](http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super- getclass) – assylias 2012-03-20 15:57:56

回答

8

getClass().getSuperclass()应该做的。

+0

http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super-getclass这个线程由你提出的坏设计,所以你会如何建议避免它 – 2012-03-20 16:00:09

+0

这取决于场景。我不知道你打算如何使用它 – Bozho 2012-03-20 17:23:15

+0

我的建议是尽可能地避免反思。 – 2012-03-20 17:27:45

4

如果您从超类(或超类的超类等)中覆盖方法,则super.theMethod()将调用原始方法,而不是您用它覆盖的方法。如果您没有实际覆盖theMethodsuper.theMethod()的行为完全像theMethod()

在这种情况下,我认为你没有覆盖getClass()(其实我知道你不是因为它是最后的),所以酷似getClass()super.getClass()行为,即无论哪种方式Object类的getClass方法被调用。

+0

是的,我同意,但为什么这样的设计,如果超级被称为调用方法,为什么它没有调用超类方法, – 2012-03-20 16:02:23

+4

@AbhishekChoudhary是的。当你调用'getClass'时,你调用'Object'中定义的方法'getClass'。 'Object'是你的类的超类(即使不是直接的超类),所以你调用超类的方法版本。事实上,超类的版本是该方法的唯一版本。 – sepp2k 2012-03-20 16:04:19

0

这是因为你正在创建派生类的对象,而不是超类..你可以试试这个

this.getClass().getSuperClass(); 
+2

'this.'是不必要的。 – 2012-03-20 16:17:13