Java 方法重载int vs short

Java 方法重载int vs short,java,polymorphism,overloading,Java,Polymorphism,Overloading,下面的类重载了方法calculate。第一个方法接受int,第二个方法接受short public class TestOverLoading { public void calculate(int i) { System.out.println("int method called!"); } public void calculate(short i) //or byte { System.out.println("

下面的类重载了方法
calculate
。第一个方法接受
int
,第二个方法接受
short

public class TestOverLoading
{
    public void calculate(int i)
    {
        System.out.println("int method called!");
    }

    public void calculate(short i)  //or byte
    {
        System.out.println("short method called!");
    }

    public static void main(String args[])
    {
        //Test1
        new TestOverLoading().calculate(5); //int method called

        //Test2         
        new TestOverLoading().calculate((short) 5); //short method called
    }
}

问题是
int方法是如何调用的
Test1
上打印?如何确定5是
int
而不是
short

编译器在编译时做出此决定。它标识所提供参数的类型;然后搜索最佳匹配

因此:5的类型是int;因此,编译器将对
calculate(int)
的调用放入字节码中。使用cast,您基本上指示编译器选择
calculate(short)


需要了解的重要一点是,重载只在编译时进行。这在支持动态调度的语言中是不同的-在这种语言中,“最佳匹配”类型是在运行时确定的。正如SeelenVirtuse所评论的:“OO设计”和多态性的整体思想是覆盖是动态的!因此,必须明确区分两者;因为重载是编译时的;而覆盖是运行时的

编译器在编译时做出此决定。它标识所提供参数的类型;然后搜索最佳匹配

因此:5的类型是int;因此,编译器将对
calculate(int)
的调用放入字节码中。使用cast,您基本上指示编译器选择
calculate(short)


需要了解的重要一点是,重载只在编译时进行。这在支持动态调度的语言中是不同的-在这种语言中,“最佳匹配”类型是在运行时确定的。正如SeelenVirtuse所评论的:“OO设计”和多态性的整体思想是覆盖是动态的!因此,必须明确区分两者;因为重载是编译时的;而覆盖是运行时的

Java的可能副本的可能副本也具有动态调度:方法重写在运行时得到解决(因此是动态的)。但是-你是对的-方法重载在编译时被完全解决了+1股;我接受了你的评论并将其添加到了答案中!Java还具有动态调度:方法重写在运行时解决(因此是动态的)。但是-你是对的-方法重载在编译时被完全解决了+1股;我接受了你的评论并将其添加到了答案中!