方法重载

什么是方法重载

方法重载其实我们在上一章中 关于构造器 已经用到了,在 People 类中同时使用了无参构造器和有参构造器,由于是都是构造器,所以它们必须有相同的名字,也就是类名。所谓方法重载,就是方法名相同而形式参数不同的多个方法。调用时,会根据不同的参数列表选择不同的方法。以下是重载的构造器和重载的方法:

public class People {
​
	private String name;
	​
	//无参构造器
	public People() {
	}
	​
	//有参构造器
	public People(String name) {
	super();
	this.name = name;
	}
	​
	​
	public void info (){
	System.out.println(“the name of the people is : “ + name);
	}
	​
	//方法重载
	public void info (String name){
	System.out.println(“the name of the people is : “ + name);
	}
}

直接调用 info() 方法会打印默认的 name,如果想自己传入 name 的值,那么可以调用 info(String name) 方法。

重载方法的区分

最简单最靠谱的规则就是每一个重载方法都有不同的参数类型列表。如下:

public void test (String s){
	System.out.println(“String: “ + s);
}
​
public void test (String s, int i){
	System.out.println(“String: “ + s + “, i : “ + i);
}

其次,参数顺序的不同也可以区分两个方法,不过,不推荐这种方法,因为这会让代码变得难以维护,容易混淆。

public void test (String s, int i){
	System.out.println(“String: “ + s + “, i : “ + i);
}
​
public void test (int i, String s){
	System.out.println(“String: “ + s + “, i : “ + i);
}

以上两个方法声明了相同的参数,但是顺序不同,因此可以区分。但是,不要试图根据返回值来区分重载方法,这是行不通的,大家可以看看下面这两个方法:

public void test(){
}
​
public int test(){
	return 0;
}

原因很简单,以上的两个方法同时出现在一个类中,编译器是会报错的。原因我们可以探讨一下,如果你在调用这个 test() 方法的时候,并不关心它的返回值,如下:

test();

那么编译器该如何区分调用的是哪一个 test() 方法呢,还能怎么办,只能报错了。

涉及基本类型的方法重载

基本类型可以从较小的类型自动提升到一个较大的类型,这种转换叫做扩展转换。重载方法中一旦涉及到这种转换,可能会造成一些混淆。

public static void test(long n) {
	System.out.println(“long: “ + n);
}
​
public static void test(double n) {
	System.out.println(“double: “ + n);
}
​
public static void main(String[] args) {
	int n = 5;
	test(n);
}

main 方法中传入的 n 是 int 类型的,控制台的运行的结果是:long: 5
所以,如果传入的数据类型(实际参数类型)小于方法中生命的形式参数类型的时候,实际数据类型就会被提升。char 类型略有不同,如果无法找到恰好接受 char 类型参数的方法,那么就会把 char 直接提升至 int 类型。

如果传入的实际参数大于重载方法,又会怎样呢,我们看看下面这段代码:

public static void test(byte n) {
	System.out.println(“bype: “ + n);
}
​
public static void test(short n) {
	System.out.println(“short: “ + n);
}
​
public static void main(String[] args) {
	int n = 5;
	//窄化转换
	test((short)n);
}

一部小心把结果写出来了,不过没办法,看不得编译器报错。所以,如果传入的实际参数大于形式参数类型,那么就必须通过类型转换来执行窄化转换,不这样做的话,编译器会毫不犹豫的报错。

欢迎关注公众号:一盐难进

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值