方法重载 (Overload)
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数不相同,类型不同或者数量不同
简单的说就是每个被重载的方法必须有独一无二的参数列表。
使用场景
方法重载一个常见的使用场景就是类构造器。因为构造器方法名肯定是与类名相同,所以一个类中只会有一个构造器名。但是很多时候你都需要通过不同的方式创建一个对象,这个时候就需要使用到方法重载。
例如 HashMap 的构造器,代码示例:
public HashMap() {
// 忽略内容
}
public HashMap(int initialCapacity) {
// 忽略内容
}
public HashMap(int initialCapacity, float loadFactor) {
// 忽略内容
}
常见注意事项
当然下面的代码也是可行的,但是并不建议这样做,这样会导致代码难以维护等问题。如果你这样做了,回家的路上请小心。
public static void print(int a, String b) {
System.out.println("int " + a + " ,String " + b);
}
/** 参数顺序不同 */
public static void print(String a, int b) {
System.out.println("String " + a + " ,int " + b);
}
如果你仔细阅读了上文,你会发现不能通过区分返回值来重载方法。
/** 这个方法会出现错误:已经在当前类定义过 */
public static void print(int a, String b) {
System.out.println("int " + a + " ,String " + b);
}
public static String print(int a, String b) {
System.out.println("int " + a + " ,String " + b);
}
因为在调用的时候虚拟机可以通过参数的不同来区分同名的方法,但是在代码编写过程中,你可能会忽略方法的返回值的接收,使用下面代码来调用一个有返回值的方法,这时候虚拟机就不能确定你想调用的是同名方法中的哪一个。
print(1, "abc");
方法重写 (Override)
方法重写指子类中出现了和父类中一模一样的方法声明。
使用场景
当子类需要父类的功能,而子类又有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
public class Fruit {
public void show() {
System.out.println("可以吃");
}
}
public class Apple extends Fruit {
@Override
public void show() {
System.out.println("变得红彤彤");
super.show();
}
}
常见注意事项
- 父类的私有方法不能被重写
- 子类方法的访问权限不能比父类中被重写的方法的访问权限更低
- 声明为 final 的方法不能被重写
- 构造方法不能被重写
区别
| 区别点 | 方法重载 | 方法重写 |
|---|---|---|
| 参数列表 | 必须不同 | 必须相同 |
| 返回类型 | 可以不同 | 必须相同 |
| 异常 | 可以不同 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
| 访问 | 可以不同 | 不能降低访问限制 |
本文详细介绍了Java中的方法重载(Overload)和方法重写(Override)的概念、使用场景及注意事项。方法重载主要应用于类构造器,强调参数列表的唯一性,而方法重写用于子类继承父类时扩展或修改功能,要求参数列表和父类完全一致。在实际编程中,需注意避免因返回类型和异常处理导致的混淆。
1294

被折叠的 条评论
为什么被折叠?



