Java如何调用方法的重载_java方法重载时的调用选择

重载:方法名相同,参数列表不同;参数列表包括参数的个数,类型,不包括参数的返回值,抛出的异常等。

对于方法重载时具体调用的选择,往往不是很清晰,看代码:

public class TestOverload {

//方法1

public static void method(int a){

System.out.println("执行method(int a)");

}

//方法2

public static void method(long a){

System.out.println("执行method(long a)");

}

//方法3

public static void method(Integer a) {

System.out.println("执行method(Integer a)");

}

//方法4

public static void method(Object a) {

System.out.println("执行method(Object a)");

}

//方法5

public static void method(int...a) {

System.out.println("执行method(int...a)");

}

public static void main(String[] args) {

int a = 0;

method(a);

}

}

对于上述代码,调用哪个方法一目了然,肯定是方法1。

如果注释掉方法1,会调用哪个方法呢?大多数人的选择可能是方法3,int会自动装箱然后调用方法3;但结果调用的是方法2;

如果再注释掉方法2,这个时候是会调用方法3;

如果方法1,2,3都被注释掉呢?是调用方法4还是5呢?调用4或者5都有解释的通的利用,但调用的是方法4;

再注释掉方法4,那调用的肯定是方法5。

如果有下面一段代码:

class A {

public static void method(int a){

System.out.println("A类中的method()");

}

}

public class TestOverload extends A{

//方法4

public static void method(Object a) {

System.out.println("执行method(Object a)");

}

//方法5

public static void method(int...a) {

System.out.println("执行method(int...a)");

}

public static void main(String[] args) {

int a = 0;

method(a);

}

}

这时候会调用4还是5呢?看结果:

A类中的method()

答案是调用父类的方法,所以关于方法重载时的调用选择我们可以得出以下结论:

精确匹配;对于上述代码中,当有method(int a)存在时调用的肯定就是这个方法;

对于基础数据类型,自动转成表示范围更大的类型;当方法1被注释的时候,会去调用method(long a)而不是method(Integer a);

自动装箱与拆箱;当方法1,2被注释,就调用方法3;

根据子类依次向上继承路线匹配;当只有方法4与方法5时,先找int的父类,找到的object类型,匹配之后调用;当继承A类之后,由于本类没有合适的方法,然后就去A类中找,匹配调用(A类中方法参数类型换成long,Integer结果也一样);

根据可变参数匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值