0

私を混乱させる問題が発生しました。それはキーワード「super」です。テスト コードは次のようになります。

package test;

public class Parent {
   private String name;

   public Parent(){
        this.name = "parent";      
   }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void showName(){
        System.out.println(this.name);
    }

}


public class Child extends Parent{

    public Child(){
        this.setName("Child");
    }

    public void showName(){
        System.out.println(super.getClass().toString());
        System.out.println(super.toString());

        super.showName();
        System.out.println(super.getName());
    }
}

public class Test {

    public static void main(String[] args) {
        Child d = new Child();
        d.showName();    
    }
}

結果は次のようになります。

class test.Child
test.Child@2207d8bb
Child
Child

「スーパー」についての私の理解は、それが現在のインスタンスの親インスタンスへの参照であるため、期待される出力は「親」のようなもので、結果から、私は間違っています。現在のインスタンスが親メソッドを呼び出すようなものです。 super' は親インスタンスではありません。私の理解は正しいですか? Child クラスを初期化するだけで親インスタンスを取得できる方法はありますか?

4

4 に答える 4

2

javadoc から、オブジェクトの実行時クラスgetClassを返します。

オブジェクトのランタイム クラスは「Child」です。

オーバーライドしgetClass()なかったため ( であるためできませんfinal)、 とsuper.getClass()まったく同じように動作しgetClass()ます。 getClassObject クラスのメソッドが呼び出されます。

親を印刷したい場合は、getClass().getSuperclass()

于 2013-08-29T07:40:21.760 に答える