3、签名和重载
2021-03-17 本文已影响0人
爱学习的代代
一、先来看一段代码: 通过观察,可以发现下面的代码有几个特征
- 功能相似,代码的名字相近
- 每个方法体内均有很多的重复代码
//买一个商品要花费的钱
public double buyOne() {
int count = 1;
if (this.count < count) {
return -1;
}
this.count--;
return count * soldPrice;
}
// 买好几个需要支付的钱
public double buyCount(int count) {
if (count > this.count) {
return -1;
}
this.count -= count;
return count * soldPrice;
}
// 用户购买的时候是VIP
public double byAsVIP(int count, boolean isVIP) {
if (count > this.count) {
return -1;
}
this.count -= count;
return isVIP ? count * soldPrice * 0.95 : soldPrice * count;
}
二、怎么解决呢?
解决办法: 方法的重载
- 方法签名: 方法名 + 依次参数类型。
返回值
不属于方法签名,方法签名是一个方法在一个类中的唯一标识。 - 同一个类方法中,方法名可以重复,方法签名不可以重复。如果一个类中定义了方法名相同,签名不同的方法,就叫方法的重载。
下面重写原有的代码:
public double buy() {
return buy(1);
}
public double buy(int count) {
return buy(count, false);
}
public double buy(int count, boolean isVIP) {
if (count > this.count) {
return -1;
}
this.count -= count;
return isVIP ? soldPrice * count * 0.95 : soldPrice * count;
}
说明:
1、重载的方法可以调用其他重载方法或者不重载方法
重载代码编写的思路:
优先写最复杂的重载方法,通过外部传参的方式将其他的方法所需的参数传递进来进行处理。
三、 程序运行效果:
image.png四、当重载的形参参数类型为double时,实参(非形参类型)传递的时候,会进行自动转换。
匹配顺序: byte > short > int > long > float > double