混乱比方说,我们有这两个阶级,一个主要的方法:约上溯造型和重载方法
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
被upcasted到Super
,类Super
检查的匹配方法 - 只有
public void f(double d)
被发现,所以浮子浇铸到一个双 - 现在方法
public void f(double d)
在更具体的类Sub
看出并执行
这是正确的吗?
因为没有方法'f(float)'可以通过'Super'类型的引用获得。 – 2014-12-06 21:01:15