教妹学Java(三十):深入理解 Java 中的方法重载(Overloading)

return a + b;

}

}

在上面的示例中,Adder 类有两个方法,第一个 add 方法的参数类型为 int,第二个 add 方法的参数类型为 double。

“二哥,改变参数的数目和类型都可以实现方法重载,为什么改变方法的返回值类型就不可以呢?”三妹很能抓住问题的重点嘛。

“因为仅仅改变返回值类型的话,编译器会懵逼。”我略带调皮的口吻回答她。

编译时报错优于运行时报错,所以当两个方法的名字相同,参数个数和类型也相同的时候,虽然返回值类型不同,但依然会提示方法已经被定义的错误。

02、 可以重载 main 方法吗

答案是肯定的,毕竟 main 方法也是个方法,只不过,Java 虚拟机在运行的时候只会调用带有 String 数组的那个 main 方法。

/**

  • @author 微信搜「沉默王二」,回复关键字 PDF

*/

public class OverloadingMain {

public static void main(String[] args) {

System.out.println(“String[] args”);

}

public static void main(String args) {

System.out.println(“String args”);

}

public static void main() {

System.out.println(“无参”);

}

}

程序输出结果如下所示:

String[] args

03、什么隐式类型转换

由于可以通过改变参数类型的方式实现方法重载,那么当传递的参数没有找到匹配的方法时,就会发生隐式的类型转换。

如上图所示,byte 可以向上转换为 short、int、long、float 和 double,short 可以向上转换为 int、long、float 和 double,char 可以向上转换为 int、long、float 和 double,依次类推。

来看示例:

/**

  • @author 微信搜「沉默王二」,回复关键字 PDF

*/

public class OverloadingTypePromotion {

void sum(int a, long b) {

System.out.println(a + b);

}

void sum(int a, int b, int c) {

System.out.println(a + b + c);

}

public static void main(String args[]) {

OverloadingTypePromotion obj = new OverloadingTypePromotion();

obj.sum(20, 20);

obj.sum(20, 20, 20);

}

}

执行 obj.sum(20, 20) 的时候,发现没有 sum(int a, int b) 的方法,所以此时第二个 20 向上转型为 long,所以调用的是 sum(int a, long b) 的方法。

再来看一个示例:

/**

  • @author 微信搜「沉默王二」,回复关键字 PDF

*/

public class OverloadingTypePromotion1 {

void sum(int a, int b) {

System.out.println(“int”);

}

void sum(long a, long b) {

System.out.println(“long”);

}

public static void main(String args[]) {

OverloadingTypePromotion1 obj = new OverloadingTypePromotion1();

obj.sum(20, 20);

}

}

执行 obj.sum(20, 20) 的时候,发现有 sum(int a, int b) 的方法,所以就不会向上转型为 long,调用 sum(long a, long b)

程序输出结果如下所示:

int

继续来看示例:

/**

  • @author 微信搜「沉默王二」,回复关键字 PDF

*/

public class OverloadingTypePromotion2 {

void sum(long a, int b) {

System.out.println(“long int”);

}

void sum(int a, long b) {

System.out.println(“int long”);

}

public static void main(String args[]) {

OverloadingTypePromotion2 obj = new OverloadingTypePromotion2();

obj.sum(20, 20);

}

}

当有两个方法 sum(long a, int b)sum(int a, long b),参数个数相同,参数类型相同,只不过位置不同的时候,会发生什么呢?

obj.sum(20, 20) 就会不知道该调用哪一个,对吧?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值