Java重载方法

本文介绍了Java中的方法重载,强调了方法签名的重要性,包括参数个数和类型。在调用重载方法时,详细阐述了参数只有一个时的调用过程,特别是涉及到隐式类型转换的规则,例如从char到int,再到double的转换。通过实例解释了如何根据这些规则选择合适的方法进行调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.定义

重载方法是指拥有相同的方法名,不同签名的方法。

签名是指方法参数的个数和类型。

PS:仅仅返回值类型不同的方法不是重载方法。因为调用方法时不知道到底调用哪一个方法。

2.调用重载方法

2.1参数只有一个时

public class OverTest {
	void play(boolean i){
		System.out.println("调用了参数为boolean型的方法");
	}
	void play(char i){
		System.out.println("调用了参数为char型的方法");
	}
	void play(byte i){
		System.out.println("调用了参数为byte型的方法");
	}
	void play(short i){
		System.out.println("调用了参数为short型的方法");
	}
	void play(int i){
		System.out.println("调用了参数为int型的方法");
	}
	void play(long i){
		System.out.println("调用了参数为long型的方法");
	}
	void play(float i){
		System.out.println("调用了参数为float型的方法");
	}
	void play(double i){
		System.out.println("调用了参数为double型的方法");
	}
	public static void main(String[] args) {
		OverTest test=new OverTest();
		test.play('i');
	}

}

这时程序输出的结果是:

调用了参数为char型的方法

说明这是调用了参数为char型的方法,当我们把参数为char型的方法注释掉后会怎么样。

这时程序输出的结果是:调用了参数为int型的方法

说明这是调用了参数为int型的方法,为什么会这样呢?

当我们调用test.play('i')时,程序会去查找OverTest类中的play(char i)方法。当没有这个方法时,怎么办。

这时要用到隐式转换规则,程序会去查找char型可隐式转换成的最低级类型的play方法,若找到,就执行这个方法。

若找不到,程序会去查找char型可隐式转换成的次低级类型的play方法,以此类推,直到找到匹配的方法为止。

若到最后也没有找到,程序会报错。

PS:关于隐式转换规则可以参看我的这篇博文

当我们调用test.play(2014)时,会调用play(int i)方法。

当我们调用test.play(2014.11)时,会调用play(double i)方法。

因为整型默认为int型,浮点型默认为double型。

2.2参数有多个时

以2个参数为例。
还是会用到隐式转换准则,首先会查找两个参数完美匹配的方法。
若找不到,则会查找某一个参数完美匹配,另一个参数按照参数只有一个时的查找方法查找。
若还找不到,先将一个参数按照参数只有一个时的查找方法查找,一个参数匹配后再将另一个参数按照参数只有一个时的查找方法查找,直到找到匹配的方法为止。
若到最后也没有找到,程序会报错。
PS:参数查找时,两个参数实际上是没有先后顺序区别的。
若查找到两个方法,其中一个方法的第一个参数与调用方法的第一个参数匹配度比另一个方法高,而第二个参数与调用方法的第二个参数匹配度比另一个方法低。那么这时会产生二义性,程序会报错。
举例:
public class OverTest {
	void play(float i,double j){
		System.out.println("调用了参数为(float,double)型的方法");
	}
	void play(double i,float j){
		System.out.println("调用了参数为(double,float)型的方法");
	}
	public static void main(String[] args) {
		OverTest test=new OverTest();
		test.play(2014,11);
	}

}


 
 
 
 
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值