Java Dispatching-Runtime类型

标签 java dispatch runtime-type

我对 java 中的方法调度感到困惑。为什么第一个方法“a.m1(b)”调用了类A?

调用变量是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

    }

}

最佳答案

重载 解析是根据编译时类型完成的。 A 类型的变量仅公开方法 m1()m1(A)。因为你传入了一个参数,所以调用了m1(A);或者更确切地说,对其进行适当的覆盖。除了 m1(B) 不是 m1(A)覆盖。 (在我的脑海中,我不知道覆盖是否可以扩大参数签名,但它们肯定不能缩小它们。)

关于Java Dispatching-Runtime类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14881072/

相关文章:

java - 列表显示面板无法正常工作

java - 跨 JVM 或应用程序实例或 Tomcat 实例的单例

pattern-matching - 在 Rust 中切换输入源的最佳方式

ios - Swift 编写一个带有返回值的 async/await 方法

c# - 何时使用运行时类型信息?

c++ - 空投的运行时检查*

java - 如何在android列表中显示带有国家和城市名称的时区?

java - 如何在android中垂直添加一个又一个动态按钮?

ios - 为什么我的金额数组没有返回任何内容?

java - 将类作为方法中的参数传递并在 If 语句中使用此参数