JavaSE_3th_方法的重载

·方法的重载

Test类中有如下void max(int a, int b)方法用于打印出两个int类型的数中最大的数,但如果实参为float类型或double类型,该方法就不可用了。

class Test {
	void max(int a, int b) {
		System.out.println(a > b ? a : b);
	}
}
于是添加了两个方法如下:
class Test {
	void max(int a, int b) {
		System.out.println(a > b ? a : b);
	}
	void maxFloat(float a, float b) {
		System.out.println(a > b ? a : b);
	}
	void maxDouble(double a, double b) {
		System.out.println(a > b ? a : b);
	}
}

每次需要根据传入的数来确定方法名,这显然太过麻烦,可以使用方法的重载解决这个问题:

class Test {
	void max(int a, int b) {
		System.out.println(a > b ? a : b);
	}
	void maxFloat(float a, float b) {
		System.out.println(a > b ? a : b);
	}
	void maxDouble(double a, double b) {
		System.out.println(a > b ? a : b);
	}
}

方法的重载是指一个类中可以定义有相同名字,但参数不同的多个方法。调用方法时,会根据不同的参数表选择对应的方法。
程序会根据test.max(3, 4)或test.max(2.8, 5.2)来选择调Test类中不同的max方法。
假如需要比较short类型数据的大小,还可以进一步添加short类型数据的max方法:

class Test {
	void max(int a, int b) {
		System.out.println(a > b ? a : b);
	}
	void max(short a, short b) {
		System.out.println(a > b ? a : b);
	}
	void max(float a, float b) {
		System.out.println(a > b ? a : b);
	}
	void max(double a, double b) {
		System.out.println(a > b ? a : b);
	}
	public static void main(String[] args) {
		Test  test = new Test();
		test.max(3, 4);
	}
}
请问test.max(3, 4);是调用的哪一个max方法?short的还是int的?
之前说过,当发生方法重载时,程序会根据实参来判断调用哪一个方法,这里的3和4默认情况是int类型,因此调用的是void max(int a, int b)这个方法,那么要调用void max(short a, short b)方法只要传入的是两个short类型的变量即可:

class Test {
	void max(int a, int b) {
		System.out.println(a > b ? a : b);
	}
	void max(short a, short b) {
		System.out.println(a > b ? a : b);
	}
	void max(float a, float b) {
		System.out.println(a > b ? a : b);
	}
	void max(double a, double b) {
		System.out.println(a > b ? a : b);
	}
	public static void main(String[] args) {
		Test  test = new Test();
		short a = 3;
		short b = 4;
		test.max(a, b);	//调用的是void max(short a, short b)方法
	}
}
对于如下情况的两个max方法并不构成重载,由于可以不接收带返回值方法的返回值,在直接调用test.max(3, 4)方法时,程序无法得知要调用的到底是哪一个max方法,因此程序会出错,故不构成方法重载。

class Test {
	void max(int a, int b) {
		System.out.println(a > b ? a : b);
	}
	int max(int a, int b) {
		return a > b ? a : b;
	}
}
一句话,方法名相同的一些方法,在被调用能够与别的方法区分开而不至于出现混淆的情况,那么这样的方法互相之间构成重载。

· 构造方法的重载
与普通方法一样,构造方法也可以重载,如下所示:
public class Test {
	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Perosn(2);
		Person p3 = new Person(3, 40);
	}
}

class Person {
	int id;
	int age;
	
	Person() {
		id = 1;
		age = 20;
	}
	Person(int _id) {
		id = _id;
		age = 30;
	}
	Person(int _id, int_age) {
		id = _id;
		age = _age;
	}
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值