这个代码中返回的是什么?

时间:2014-07-17 15:06:28

标签: java

在此代码中

class Parent {

    void show() {
        System.out.print("parent");
    }

    Parent a() {
        return this;
    }

}

class Child extends Parent {

    void show() {
        System.out.print("child");
    }

    public static void main(String arg[]) {
        Parent a = new Child();
        Parent b = a.a();
        b.show();
    }
}

return this;做什么? b.show()正在调用子方法show。那么this会返回对其子类的引用吗?如果没有,那么如何调用孩子的show()方法?

1 个答案:

答案 0 :(得分:5)

首先,Java中的所有非私有和非静态方法都是虚拟的,这意味着您将始终执行对象引用类型的方法。

在这种情况下,你有

parent a=new child();

这意味着使用a的客户端(类/方法)只能执行parent类中定义的方法,但行为是由类型child定义的。

在此之后,当你执行:

parent b=a.a();

a.a()将返回this,但achildthis是当前对象引用,即ab的值为a

然后执行

b.show();

正在调用child#show,因此程序将输出" child"。