我有一个叫做Entity
的类,它是我在整个程序中使用的许多其他对象的超类(类)。为什么在父方法中返回子类名称?
在许多方法中,我通过打印语句打印的类名打印调试语句,然后打印实际的调试消息。但令我惊讶的是,当我从Apple
的实例中调用继承的方法时,将打印类名称Apple
而不是类名称Entity
(这是方法实际所在的位置)。
举一个相关的例子,更容易张贴代码片段,我已重写toString()
像这样:
public abstract class Entity {
private String name;
@Override
public String toString() {
return getClass().getSimpleName() + " " + (name != null ? name : super.hashCode());
}
}
因为我没有进一步覆盖在Apple
类这种方法,我会第一个想到这个部分返回的字符串为Entity
,而不是Apple
。然而它返回Apple
(这实际上很好,它在这种用例中以这种方式工作,但仍然有些莫名其妙)。
我试着看着Object#getClass()
的实现,但是因为它被声明为native
方法而无法执行。
public final native Class<?> getClass();
谁能解释为什么出现这种情况?
感谢您的回答。是的,它*很好,它可以用''toString()'这样的方式工作,但是对于调试有时令人沮丧。 :)它刚刚无视我对语言的期望。 – asteri 2013-02-20 17:21:01