关于重载的概念和使用时的注意事项

概念

在同一个类中,两个以上的函数(方法),具有相同的函数(方法)名但是参数列表不同,在编译时,由编译器根据参数的对应关系,自动确定调用哪一个函数,即为重载。其中,参数列表的不同可以时参数类型的不同,也可以是参数的个数不同,亦或是参数的顺序不同。但是,编译器不会通过形参的名称区别形参,形成重载。

重载是可以使函数、运算符等处理不同类型的数据或者接受不同个数的参数的一种方法。从某种意义上理解, 重载相当于我们日常生活中的动词。比如“喝”,既可以表示喝水,也可以表示喝汤,还能表示喝奶,当我们听到 “喝”这个词的时候就会通过对话的语境来判断喝的是什么;同样的道理,当编译器在碰到被重载的函数(方法) 名时,也会根据上下文,即实参的类型或者个数去选择调用某个具体的函数(方法)。


重载的使用

先给出一组标准的重载示例

int add(int x, int y) {
    System.out.println("方法 1");
	return x + y;
}

int add(int x, int y, int z) {
	System.out.println("方法 2");
	return x + y + z;
}

double add(double x, double y) {
	System.out.println("方法 3");
	return x + y;
}

double add(double x, double y, double z) {
	System.out.println("方法 4");
	return x + y + z;
}

上面的示例中,给出了同名的四个方法,方法名都是add, 但是,是方法的参数列表各不相同。
下面来测试一下这一组重载方法:

public static void main(String[] args) {
	OverloadTest test = new OverloadTest();
	System.out.println(test.add(1, 3));
	System.out.println(test.add(1, 2, 3));
	System.out.println(test.add(1.2, 3.2));
	System.out.println(test.add(1.2, 2.2, 3.0));
}

运行结果如下:

方法 1
4
方法 2
6
方法 3
4.4
方法 4
6.4

由上面的示例,可以发现,方法的返回类型其实是有所变化的,这并不会影响方法重载。但是,如果两个方法仅仅是返回值有所区别,这并不能构成重载,反而会导致编译错误。

在一段程序中,编写如下两个方法:

double add(double x, double y, double z) {
	System.out.println("方法 4");
	return x + y + z;
}
int add(double x, double y, double z) {
	System.out.println("方法 4");
	return x + y + z;
}

 编译器错误提示如下:

Duplicate method add(double, double, double) in type OverloadTest

不要将不同功能的函数(方法)声明为重载函数(方法),以免混乱。也就是说,重载的函数(方法)在功能上应该是相近的(比如整型和浮点型数据的各自相加),而不应该把功能完全相反的函数(方法)用重载组合。

int compute(int a,int b){
	return a+b;
}
float compute(float a,float b){
	return a-b;
}

 上面的例子中,一个是对整形数据做加法,一个是对浮点型的数据做减法,这样在项目后期维护的过程中,就是一个噩梦。

当使用具有默认形参值的函数(方法)重载的形式时,需要注意防止二义性。

void fun(int x,int y = 2, int z = 3) {}
void fun(int x) {}

这种带有默认形参的函数声明的用法在C++中广泛存在,应该特别注意。


以上,就是有关函数(方法)重载的相关概念和使用注意事项,供读者参考。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值