super.getClass().getName()メソッド呼び出しは誰を返しますか?
2135 ワード
package testKeywords;
import java.util.Date;
public class TestSuper extends Date{
public static void main(String[] args) {
new TestSuper().test();
}
public void test(){
System.out.println(super.getClass().getName());
}
}
第一:TestSuperのgetClass()でもDateのgetClass()でも、彼らは非上書き式でObjectから継承されています.第二に、ObjectのgetClass()メソッドの意味は、このObjectのランタイムクラスを返すことです.返されるClassオブジェクトは、クラスを表すstatic synchronizedメソッドによってロックされたオブジェクトです. /** * Returns the runtime class of this {@code Object}. The returned * {@code Class} object is the object that is locked by {@code * static synchronized} methods of the represented class. ***/意味では、このObjectランタイムクラスを返すには、もちろんObject自身を指すことはできません.そうしないと、すべてのクラスがgetClass()メソッドを呼び出してObjectを返します.classです.では、いったい誰がObjectのランタイムクラスなのか、Object自身ではなく、もちろん彼の息子やいろいろな孫しかいません.いったい誰なのか、例えば、Dateは直接Objectを継承するクラスとして、Objectの息子として、Dateを呼び出すとします.getClass()は、何を返しますか?デイトではこれにかかわらずgetClass()かsuperか.getClass()は、間違いなくObjectを指しています.getClass().前の説明によると、Object.getClass()が戻るのはObjectではありません.class、それは言うまでもなく、Dateだけだ.classです.上段:new Date()の場合、DateはObjectのランタイムクラスです.同理:コードによると、new TestSuper()の时、実行はクラスがTestSuperの彼の老子Dateであることは不可能で、更に彼の各种の老子(例えばObject)であることはできなくて、自分だけです.Objectに戻りますgetClass()の意味は、TestSuperのみが返されます.class第三:TestSuperからDateを手に入れたいなら.Class、TestSuperが使えます.getClass().getSuperClass();