自动装箱和重载

San*_*p s 4 java autoboxing overloading

public class JavaMain {

    public static void main(String[] args) {
        JavaA a = new JavaB();
        a.m1(5);
        a.m1(new Integer(5));
    }

}

class JavaA{

    public void m1(Integer i){
        System.out.println(2);
    }
}

class JavaB extends JavaA{

    public void m1(int i){
        System.out.println(1);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出:2 2

根据我的理解,输出将是"1 2".

1)当我从main方法调用方法a.m1(5)时.根据重载概念,应该执行类JavaB的方法.但它不会.

请帮我理解重载+自动装箱的概念.

Mar*_*nik 5

JavaA a = new JavaB();
a.m1(5);
a.m1(new Integer(5));
Run Code Online (Sandbox Code Playgroud)
  • 静态类型aJavaA
  • JavaA 声明只有一种方法 m1
  • 该方法接受 Integer
  • 它适用于两个电话

方法签名在编译时解析.编译器仅考虑在目标表达式的静态类型中声明的签名(JavaA在您的情况下).