以下类已重载方法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 method called!
如何打印Test1
?如何确定5是int
而不是short
?
答案 0 :(得分:5)
编译器在编译时做出此决定。它标识提供的参数的类型;然后它搜索最佳匹配。
因此:5的类型是int;因此,编译将calculate(int)
调用到字节码中。使用强制转换,您基本上可以指示编译器选择calculate(short)
。
要理解的重要一点是重载只是编译时间。这与支持动态调度的语言不同 - 在这种语言中,“最佳拟合”类型是在运行时确定的。正如Seelenvirtuose所评论的那样:“OO设计”和多态的整个概念是重写是动态的!因此,明确区分两者是很重要的;因为重载是编译时的;并且覆盖是运行时!