从基类方法调用基类重写函数
2022-09-01 03:08:49
public class A {
public void f1(String str) {
System.out.println("A.f1(String)");
this.f1(1, str);
}
public void f1(int i, String str) {
System.out.println("A.f1(int, String)");
}
}
public class B extends A {
@Override
public void f1(String str) {
System.out.println("B.f1(String)");
super.f1(str);
}
@Override
public void f1(int i, String str) {
System.out.println("B.f1(int, String)");
super.f1(i, str);
}
}
public class Main {
public static void main(String[] args) {
B b = new B();
b.f1("Hello");
}
}
我正在寻求此代码将输出:
B.f1(String)
A.f1(String)
A.f1(int, String)
然而,我得到:
B.f1(String)
A.f1(String)
B.f1(int, String)
A.f1(int, String)
我理解在B的上下文中,A.f1(字符串)中的“this”是B的实例。我有没有选择做链新的B1().f1(字符串) ->(A的) f1(字符串) ->(A的) f1(int,字符串)?
这是一个理论问题,实际上解决方案显然是在A中实现f1(String)和f1(int,String)都会调用的私有函数。
谢谢你,
马克西姆。