假设我们有这两个类和一个主要方法:
public class Super {
public void f(double d){
System.out.println("Super: f(double d)");
}
public void f(int i){
System.out.println("Super: f(int i)");
}
}
public class Sub extends Super {
public void f(double d){
System.out.println("Sub: f(double d)");
}
public void f(float f){
System.out.println("Sub: f(float f)");
}
}
public class M {
public static void main(String[] args){
Sub a = new Sub();
a.f(1.5f); //output: "Sub: f(float f)"
Super b = new Sub();
b.f(1.5f); //output: "Sub: f(double d)"
}
}
为什么第二次调用的结果Sub: f(double d)
和Sub: f(float f)
第一次不同?
当我添加
public void f(float f) {
System.out.println("Super: f(float f)");
}
到Super
班级,输出变为Sub: f(float f)
。
鉴于这种行为,我希望工作流程如下所示:
- 如上
a
图所示,检查Super
该类Super
是否有匹配的方法 - 仅
public void f(double d)
找到,因此将浮点数转换为双精度 - 现在可以看到并执行
public void f(double d)
更具体的类中的方法Sub
这个对吗?