Java 面向对象(OOP)中的方法重载(Overload)与方法重写(Override),理解多态和类设计的重要基础
·
1. 方法重载(Overloading)
方法重载是 在同一个类中,方法名相同,但参数列表不同(类型、个数或顺序不同)。
1.1 特点
-
方法名相同
-
参数列表不同(类型、数量、顺序)
-
返回类型可以相同或不同(与重载无关)
-
修饰符可以不同
1.2 示例
public class Calculator {
// 两个整数相加
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 Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(1, 2)); // 3
System.out.println(calc.add(1, 2, 3)); // 6
System.out.println(calc.add(1.5, 2.5)); // 4.0
}
}
✅ 总结:
-
重载发生在编译时,根据参数列表决定调用哪一个方法
-
与继承无关(在同一个类中即可)
2. 方法重写(Overriding)
方法重写是 子类重新定义父类中已经存在的方法,用于实现多态。
2.1 特点
-
方法名相同
-
参数列表必须相同
-
返回类型相同或协变类型(Java 5+ 支持协变返回类型)
-
子类方法访问权限 ≥ 父类方法访问权限
-
子类方法不能缩小父类方法的权限(例如父类
public,子类不能用private) -
static方法不能被重写(可以隐藏) -
父类方法可以加
final,子类不能重写
2.2 示例
class Animal {
public void makeSound() {
System.out.println("动物叫");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Dog();
a.makeSound(); // 输出:汪汪汪(多态)
}
}
✅ 总结:
-
重写发生在运行时,表现为多态
-
必须在父类和子类中方法签名完全一致
-
可以使用
@Override注解,帮助编译器检查
3. 方法重载 vs 方法重写对比
| 特性 | 方法重载(Overload) | 方法重写(Override) |
|---|---|---|
| 所在位置 | 同一类 | 父类与子类 |
| 方法名 | 相同 | 相同 |
| 参数列表 | 不同 | 必须相同 |
| 返回类型 | 可以不同 | 相同或协变 |
| 发生时间 | 编译时 | 运行时 |
| 多态 | 否 | 是 |
| static 方法 | 可以重载 | 不能重写(隐藏) |
4. 小结与示例
class Calculator {
// 重载示例
public int add(int a, int b) { return a + b; }
public double add(double a, double b) { return a + b; }
}
class Animal {
public void eat() { System.out.println("动物吃东西"); }
}
class Dog extends Animal {
@Override
public void eat() { System.out.println("狗吃骨头"); }
}
public class Main {
public static void main(String[] args) {
// 方法重载
Calculator calc = new Calculator();
System.out.println(calc.add(1, 2)); // 3
System.out.println(calc.add(1.5, 2.5)); // 4
// 方法重写
Animal a = new Dog();
a.eat(); // 多态,输出:狗吃骨头
}
}
更多推荐



所有评论(0)