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的方法.但它不会.
请帮我理解重载+自动装箱的概念.
JavaA a = new JavaB();
a.m1(5);
a.m1(new Integer(5));
Run Code Online (Sandbox Code Playgroud)
a是JavaAJavaA 声明只有一种方法 m1Integer方法签名在编译时解析.编译器仅考虑在目标表达式的静态类型中声明的签名(JavaA在您的情况下).