我有一個叫做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