「 Java 面向对象系列 07 」
📖 上篇回顾:Java 面向对象核心入门(六):this 关键字完全解析-CSDN博客
前面学完构造方法、this关键字,本篇搞懂方法重载。 新手经常疑惑:为什么 Java 里好多方法名字一样,传的参数不一样,效果就不一样?这就是重载。
一、什么是方法重载
方法重载(Overload):同一个类中,方法名相同,参数列表不同,与返回值无关。
生活类比: 同一个行为叫“吃饭”
- 吃饭():无参,吃普通米饭
- 吃饭(一碗面):吃面
- 吃饭(米饭,青菜):米饭配青菜
名字都叫吃饭,但是传入东西不一样,做的事情就不一样,这就是重载。
二、构成重载的3个必要条件(必须全部满足)
⚠️ 重点坑:和返回值类型没关系!只改返回值不算重载,直接编译报错。
✅合法重载示例
public class Student {
// 无参
public void study(){
System.out.println("学生在学习");
}
// 1个int参数
public void study(int hour){
System.out.println("学习"+hour+"小时");
}
// 参数类型不同
public void study(String subject){
System.out.println("学习科目:"+subject);
}
}
调用演示:
public class Test {
public static void main(String[] args) {
Student stu = new Student();
stu.study(); //自动匹配无参
stu.study(3); //匹配int参数
stu.study("Java"); //匹配String参数
}
}
JVM会根据你传入参数的个数、类型自动去匹配对应的方法,不用记一堆乱七八糟的方法名。
三、常见新手4大坑
坑1:只改返回值,不算重载
//错误!仅返回值不同,编译报错
public void test(){}
public int test(){return 1;}
编译器分不清调用哪一个,返回值不作为重载判断依据。
坑2:参数名字不一样,不算重载
// ❌ 错误写法:参数变量名不同但类型相同,不算重载,编译报错
public void add(int a) {}
public void add(int b) {} // 报错:方法已定义
// ✅ 正确:参数类型不同才是重载
public void add(int a) {}
public void add(double b) {}
判断看参数类型列表,不看变量名。
坑3:构造方法也可以重载
构造方法同样遵守重载规则,这就是为什么我们可以同时有无参构造、有参构造。
class Student{
//无参构造
public Student(){}
//有参构造,重载
public Student(String name){
this.name = name;
}
}
这也是开发中最常用的场景,一个类提供多种对象创建方式。
坑4:重载不是方法重写!别搞混
重载 Overload:同一个类,方法名相同参数不同。
重写 Override:子类继承父类之后才会出现,后续讲继承再说。
四、为什么要用重载?实际开发好处
完整小案例:
class Calc{
//两个整数相加
public int add(int a,int b){
return a+b;
}
//三个整数相加,参数个数不同
public int add(int a,int b,int c){
return a+b+c;
}
//两个小数相加,参数类型不同
public double add(double a,double b){
return a+b;
}
}
public class Demo{
public static void main(String[] args) {
Calc calc = new Calc();
System.out.println(calc.add(1,2));
System.out.println(calc.add(1,2,3));
System.out.println(calc.add(1.5,2.5));
}
}
运行结果:
3
6
4.0
📝全文小结
下一篇预告:面向对象三大特性之 ——继承 extends




