Sam*_*mmy 2 java dispatch runtime-type
我对java中的方法调度感到困惑.为什么第一种方法"a.m1(b)"调用A类?
调用变量是一个.它的运行时类型是B,不是吗?
class A {
public void m1(A a){
System.out.println("A-m1");
}
public void m1(){
System.out.println("A-m1");
}
}
class B extends A {
public void m1( B b){
System.out.println("B-m1");
}
public void m1(){
System.out.println("B-m1");
}
}
public class HelloWorld {
public static void main(String[] args) {
B b = new B();
A a = new B();
a.m1(b);//prints A-m1
a.m1();//prints B-m1
}
}
Run Code Online (Sandbox Code Playgroud)
过载分辨率基于编译时类型完成.类型的变量A仅暴露方法m1()和m1(A).因为你传入一个参数,所以m1(A)被调用; 或者更确切地说,适当地覆盖它.除了m1(B)是不是一个重写的m1(A).(在我的头顶,我不知道覆盖是否可以扩大参数签名,但他们当然不能缩小它们.)
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |