class www{
void ff(int i){}
void ff(long i){}
void ff(float i){}
void ff(double i){}
}
通过这个类,假如执行 www.ff(参数),如果参数是int、float、long、double型,那肯定能够准确找到相应的ff()方法。
但是如果www.ff(char),参数为char类型,就会把char类型直接转换为int类型,调用ff(int i);
如果www.ff(short),参数是short类型,那么就会将short提升为更大的类型,直到能够匹配,那么就会调用ff(int i)方法。
类型升级:当无法精准找到对应的方法时,可以允许提升数据类型,来找到最合适的方法执行。
class www{ void ff(long i){} void ff(float i){} void ff(double i){} } 这种情况,如果 www.ff( int类型数据 ),会执行 ff(long i)方法。
class www{ void ff(float i){} void ff(double i){} } 这种情况,如果 www.ff( int类型数据 ),会执行 ff(float i)方法。
class www{ void ff(double i){} } 这种情况,如果 www.ff( int类型数据 ),会执行 ff(double i)方法。
因此,类型升级的原则是:char/short 升 int,int 升 long/float/double,long 升 float/double, float 升 double。
但是类型只能是自动升,但是没有自动将,比如 double类型的参数无法去匹配 float 类型的方法。
总结:类型小了,没匹配到方法,就将类型变大去匹配。如果类型大了,就缩小去匹配。
注意:类型大了,只能手动去强制降级类型,数据的值可能发生变化,但是编译器不报错。