使用super和this关键字调用覆盖方法时会发生什么?

时间:2013-05-08 09:55:55

标签: java this super

public class Superclass {



    void method0(){
        System.out.println("superclass");
    }
}


public class Subclass extends Superclass{

    void method0(){
        System.out.println("subclass");
    }

    void method1(){
        super.method0();
    }

    void method2(){
        this.method0();
    }
}


public class RunClass {

    public static void main(String[] args){
        new Subclass().method1();
        new Subclass().method2();
    }
}

上面的代码打印出来

superclass
superclass

虽然我希望它打印出来

superclass
subclass

不是 this.method0()引用子类中的method0并打印出子类而不是超类

4 个答案:

答案 0 :(得分:0)

super表示父类的实例。 this表示当前类的实例。 它将打印

子类

答案 1 :(得分:0)

我运行了你的代码,它给了我

superclass
subclass

这应该打印一切似乎没问题

答案 2 :(得分:0)

new Subclass().method1();

执行method1() Subclass实例,后者又调用super.method0();即父类实例的method0()Superclass实例method0()。< / p>

new Subclass().method2();

执行method2() Subclass实例,该实例又调用this.method0();,即此实例的method0()Subclass实例method0()

super用于访问父类的实例成员,而this用于访问当前类的成员。

答案 3 :(得分:0)

首先,它会打印出您所期望的内容。

第二,

  

不是this.method0()引用子类中的method0并打印出来   子类而不是超类?

this =&gt;引用当前对象,使用它你可以使用它(有点指向自身,一般来说)

super =&gt;引用层次结构中的超类对象,通常用于访问子类

中的隐藏成员