在此代码中
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()
方法?
答案 0 :(得分:5)
首先,Java中的所有非私有和非静态方法都是虚拟的,这意味着您将始终执行对象引用类型的方法。
在这种情况下,你有
parent a=new child();
这意味着使用a
的客户端(类/方法)只能执行parent
类中定义的方法,但行为是由类型child
定义的。
在此之后,当你执行:
parent b=a.a();
a.a()
将返回this
,但a
为child
,this
是当前对象引用,即a
。 b
的值为a
。
然后执行
b.show();
正在调用child#show
,因此程序将输出" child"。