java如何选择使用多态性时应调用的方法
我需要一种方法来选择应该调用谁的方法
我正在调用一个父方法,它使用“this”调用它的一个方法。问题是我在类中重写了这个方法,所以当调用父方法时,它会调用我的方法,而不是它的方法
public class MainTest
{
public static class A
{
public String m1()
{
return this.m2();
}
public String m2()
{
return "A.m2() called";
}
}
public static class B extends A
{
@Override
public String m1()
{
return "B.m1() called";
}
@Override
public String m2()
{
return "B.m2() called";
}
public String m3()
{
return super.m1();
}
}
public static void main(String[] args)
{
System.out.println(new B().m3());
}
}
我想实现“A.m2()调用”,但实际输出是“B.m2()调用”
# 1 楼答案
为了实现你想要的,你需要在
B.m3
中调用super.m2()
调用
super.m1()
不起作用,因为A.m1
调用this.m2()
this
是运行时类型B
(您从未创建过A
对象,因此它不能是运行时类型A
),因此B
中的m2
将被调用。你只能调用super.m2()
来实现你想要的