为什么使用直接超类参数而不是 Object 选择重载方法?

Why is overloaded method selected with direct superclass parameter rather than Object?

public class Main {
    static void method(A a){
        System.out.print("one");
    }

    static void method(B b){
        System.out.print("two");
    }

    static void method(Object obj){
        System.out.print("three");
    }

    public static void main(String[] args) {
        C c = new C(); 

        method(c);
    }
}
class A {}
class B extends A{}
class C extends B{}

如您所见,我认为它显示的是 "three",但真正的答案是 "two"。谁能给我解释一下?谢谢!

重载将解析为适用于参数的最具体的类型。 ABObject 都可以应用于 C,但其中最具体的是 B。所以 method(B) 会被调用。

如果 C 没有扩展 AB,那么将调用 method(Object)