Java 方法重载怎么用

早上刚到公司,开发部的小张就拿着代码找我:“你帮我看看这段代码为啥报错?我明明写了两个方法名一样的函数。”我点开他的屏幕,看到两个方法都是calculateScore,一个传1个分数,一个传2个,系统直接标了红。

这就是很多刚学Java的人踩过的坑——以为方法名重复就错,其实是没搞懂“方法重载”这个好用的特性。简单说,方法重载就是“同一个名字,不同的干活方式”,就像生活里的“煮东西”,煮米饭、煮面条、煮鸡蛋,都可以说“煮”,但准备的食材、火候、时间都不一样,这和Java里的重载逻辑完全一致。

Java 方法重载怎么用

什么是方法重载?

方法重载,是指在同一个类里,存在多个名字相同但参数列表不同的方法。这里的“参数列表不同”,不是随便改改参数名,得满足三个条件:参数的数量不一样,参数的类型不一样,或者参数的顺序不一样。哪怕参数名完全相同,只要满足其中一个,就是合法的重载。

举个生活化的例子:你手机里有个“发消息”的APP,不管是给单个联系人发文字,给多个人发图片,还是给好友发语音,都用“发消息”这个操作——名字一样,但每次要的东西(参数)不一样:有的要1个“联系人+文字”,有的要3个“多个联系人+图片+文件”。Java里的重载也是这个道理,同一个方法名,根据传进去的参数不一样,自动对应不同的方法执行。

方法重载要注意的坑

知道了怎么判断,接下来要避开两个常见的误区,不然写出来的代码会报错。

第一个误区:只改参数名,不算重载。比如你写void add(int a)和void add(int b),这两个方法参数类型都是int,数量都是1,只是参数名不一样,Java根本不把它们当重载,运行时还是会报错,就像你说“煮”的时候,不管说“煮米”还是“煮米”,本质都是煮米饭,系统分不清你要啥。

第二个误区:和方法的返回值无关。很多人以为改返回值类型就行,比如int add(int a,int b)和void add(int a,int b),这俩不是重载——就像你说“煮”,不管说“煮成米饭”还是“煮成粥”,还是同一个“煮”的动作,传的东西没变,系统还是搞不清。

怎么用方法重载提升代码效率?

方法重载最实用的地方,就是不用给类似功能的方法起一堆不同的名字,让代码更简洁好懂。比如你要写一个计算快递费的工具类,不管用户是寄同城(只需要重量)、寄省外(重量+距离),还是寄生鲜(重量+距离+保温费),都可以用同一个方法名calculateExpressFee,不用起calculateSameCityFee、calculateProvinceFee之类的长名字,别人一看就知道是“计算快递费”的逻辑。

举个可运行的小例子:

`java

public class ExpressCalculator {

// 计算同城快递费:只有重量参数

public double calculateExpressFee(double weight) {

return weight * 8; // 同城每公斤8元

}

// 计算省外快递费:重量+距离参数

public double calculateExpressFee(double weight, double distance) {

return weight * distance * 0.5; // 省外每公斤每公里0.5元

}

// 计算生鲜快递费:重量+距离+保温费

public double calculateExpressFee(double weight, double distance, boolean isFresh) {

double baseFee = weight * distance * 0.5;

return isFresh ? baseFee + 10 : baseFee; // 生鲜加10元保温费

}

public static void main(String[] args) {

ExpressCalculator calculator = new ExpressCalculator();

System.out.println(calculator.calculateExpressFee(2.5)); // 寄2.5公斤同城,输出20.0

System.out.println(calculator.calculateExpressFee(3, 1000)); // 寄3公斤1000公里省外,输出1500.0

System.out.println(calculator.calculateExpressFee(3, 1000, true)); // 生鲜加保温,输出1510.0

}

}

`

你看,调用的时候,传不同的参数,Java会自动找到对应的方法执行,不用你额外判断用哪个方法,代码既干净又好维护。

总结一下,方法重载就是“同名字,不同参数”,满足数量、类型、顺序其中一个不同就行,别踩参数名、返回值的坑,用它把类似功能的方法归成一类,代码写得省心,别人读得也轻松。

上一篇 TypeScript 如何实现类