java 中的多态性方法如何匹配

how polymorphism method matches in java

我对 Java 多态性的工作原理感到困惑。 在下面的例子中,有showText三个多态方法,为了区别清楚,这些方法的名称分别为method-1method-2method-3。代码如下:


public class PolymorphismTest {
    public static void main(String[] args) {
        showText("def");
    }

    // method-1
    private static void showText(Object abc) {
        print("1.....");
        showText(abc, "abc");
    }

    // method-2
    private static void showText(Object abc, String item) {
        // print(abc.getClass().getName());
        print("2.....");
        String text;
        if (abc == null) {
            text = null;
        } else {
            text = abc.toString();
        }
        showText(text, item);
    }

    // method-3
    private static void showText(String abc, String item) {
        print("3.....");
    }

    private static void print(String text) {
        System.out.print(text);
    }
}

main() 调用 method-1 参数类型为 String,在 method-1 的主体中它调用了另一个匹配的方法,method-2method-3?

我在java8测试,输出是

1.....2.....3.....

重载在 编译时 决定,因此当第一个方法获取 abc 参数时,它会将其视为 Object(而不是 String) 并调用具有适当签名的 method-2

您可能会感到困惑,因为这与动态链接机制不同,动态链接机制适用于 class 实例(对象)方法,并根据 在运行时 解析方法在进行调用的实例的实际 class 上(例如 abc.toString() 中的 toString())。