Java中支持方法名相同,但是方法参数不同而自动去选择执行哪一个方法,如print(int i)和print(String str),虽然方法名相同,但是参数不同。象这里的int和String 参数差异比较大所以看起来这种重载没什么差别,但是如果是类型差别不大, 会出现什么情况呢?
看下面的代码:
public void f(float i){
System.out.println("float");
}
public viod f(double i){
System.out.println("double");
}
那么执行 f(5)会输出什么呢?5是被认为是float类型还是double类型还是会报错呢?执行结果是 float 。原来在这种情况下,该数据类型能被转为一个较大的数据类型,比5较大的数据类型是float,其次才到double,所以输出结果是float。还有一个特殊的情况就是如果输入类型为char,如这里我们执行f('a'),
不要以为这会出错,其实是不会出错的,因为如果没有发现一个准确的char于它匹配,那么它就把这个char转换成int类型,如果没有int类型和它匹配,在去寻找较大的数据类型,这里它找到了float,所以这里执行flaot('a')输出的还是 float。
下面再讨论另外一种情况,譬如说下面这种情况:
定义了下面一个方法:
public void f(int i){
System.out.println("int ");
}
如果执行f(100.99)会不会在这种数据类型大于这种重载方法期待的变量时会怎么处理呢?会不会把这种较大的数据类型缩小到期待的数据类型?编译一下,很遗憾出错了,在这种情况下是出错的。
这么快就12点半了,睡觉了~~~不然明天早晨爬不起来了。