繁体   English   中英

当您使用super和此关键字调用替代方法时会发生什么?

[英]What happen when you call an override method using super and this keyword?

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并打印出子类而不是超类吗?

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

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

superclass
subclass

这个应该打印的东西似乎还可以

new Subclass().method1();

执行Subclass实例的method1() ,后者依次调用super.method0(); 即父类实例的method0()Superclass实例method0()

new Subclass().method2();

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

super被使用,而访问父类的实例成员this是用来访问当前类的成员。

首先,它可以打印出您的期望。

第二,

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

this =>引用当前对象,使用它就可以使用它(一般来说,指向自身的指针种类)

super =>引用层次结构中的超类对象,通常用于访问子类中的隐藏成员

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM