卡码笔记
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
  • 基础与面向对象

    • 面向对象三大特性
    • 面向对象和面向过程的区别是什么?
    • 抽象类和接口的区别?
    • 说说你对多态的理解?
    • Java中的方法重载和方法重写有什么区别?
      • 简要回答
      • 详细回答
      • 知识拓展
    • Java中的final关键字可以修饰什么?被final修饰后有什么特点?
    • equals方法和==的区别
    • 堆和栈的区别?
    • 解释一下Java中的泛型及其作用?
  • 集合

  • 异常

  • 字符串

  • JVM

  • 并发与多线程

  • JDK

  • Spring

  • 设计模式

# 方法重载与方法重写

# 简要回答

# 方法重载 和 方法重写 的概念

  • 方法重载(Overload):在同一个类中定义多个同名方法,但参数列表(类型、数量或顺序)不同。
  • 方法重写(Override):在子类中重新定义父类的方法,要求方法签名(方法名、参数列表、返回类型)完全相同。

# 方法重载 和 方法重写 的区别

  • 如下表所示 :

    维度 方法重载 方法重写
    作用范围 同一类中 子类与父类之间(继承关系)
    参数列表 必须不同(类型、数量、顺序至少一个不同) 必须相同
    返回类型 可以不同 必须相同或兼容(子类可返回父类返回类型的子类)
    访问修饰符 无限制 子类方法权限不能比父类更严格(访问权限:子类≥父类)
    异常处理 可抛出不同异常 不能抛出比父类方法更宽泛的检查异常
    静态/非静态 允许静态方法重载 静态方法不能被重写
    多态性 编译时多态(静态绑定) 运行时多态(动态绑定)

# 详细回答

# 方法重载 和 方法重写 的概念

  • 方法重载(Overload) :在同一个类中定义多个同名方法,但参数列表(类型、数量或顺序)不同。方法重载可以有效地增强代码灵活性,例如,一个工具类可能提供多种参数类型的 add() 方法。
  • 方法重写(Override) :子类通过完全一致的方法签名重新定义父类方法,以实现多态性。例如,子类自定义的 toString() 方法覆盖 Object 类的默认实现。

# 方法重载 和 方法重写 的区别

  1. 作用范围:
    • 重载仅发生在同一类中。
    • 重写需要继承关系,由子类覆盖父类的方法。
  2. 参数列表:
    • 重载必须修改参数列表(参数的类型、数量或顺序至少需要一个不同点)。
    • 重写参数列表必须完全一加粗致。
  3. 返回类型:
    • 重载允许返回类型不同。
    • 重写要求返回类型相同或兼容(协变返回类型)。例如,父类返回 Object 类型,子类可返回 String 类型。
  4. 访问修饰符:
    • 重载方法可以使用任意访问修饰符(public、protected、private)。
    • 重写方法的访问权限不能比父类更严格(如父类为 public,子类不能为 protected)。
  5. 异常处理:
    • 重载可以抛出不同的异常。
    • 重写要求子类方法抛出的检查异常(Checked Exception)不能比父类更宽泛。例如,父类抛出 IOException,子类可抛出 FileNotFoundException,但不能抛出 Exception。
  6. 静态方法:
    • 静态方法可以重载(例如 public static void log(String username) 和 public static void log(int identitycode))。
    • 静态方法不能被重写。若子类定义同名静态方法,属于“方法隐藏”(Method Hiding),而非重写。
  7. 多态性:
    • 重载在编译时决定调用哪个方法(静态绑定)。
    • 重写在运行时根据对象实际类型决定调用哪个方法(动态绑定)。

# 方法重载 和 方法重写 的代码演示

  • JDK 源码中的方法重载示例:

    • 如 java.io.PrintStream 类中的 println() 方法:

      public class PrintStream {
      	public void println() { ... }          // 参数个数不同
      	public void println(boolean x) { ... } // 参数类型不同
      	public void println(int x) { ... }     // 参数类型不同
      	public void println(char[] x) { ... }  // 参数类型不同
      }
      
      1
      2
      3
      4
      5
      6
  • JDK 源码中的方法重写示例

    • 如 java.util.AbstractList 类中的 equals() 方法在 ArrayList 类中的重写:

      public class ArrayList<E> extends AbstractList<E> {
      	// 重写 AbstractList 的 equals 方法
      	@Override
      	public boolean equals(Object o) {
      		if (o == this) return true;
      		if (!(o instanceof List)) return false;
      		// 自定义比较逻辑...
      	}
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9

# 知识拓展

  • 方法重载 的示意图:
    image
  • 方法重写 的示意图:
    image
  • 静态方法与重载/重写的关系:
    • 静态方法可以重载:同一类中允许定义多个同名静态方法,只要参数列表不同。
    • 静态方法不能重写:若子类定义与父类同名的静态方法,属于“方法隐藏”(Method Hiding)。父类静态方法不会被覆盖,具体调用哪个方法取决于引用类型(编译时决定)。
  • Ultra-Condensed-Version:
    • Overloading: Same method name with different parameter list (within a class).
    • Overriding: Subclass redefines a superclass method with the same method signature (polymorphism).

Last Updated: 3/10/2026, 6:08:48 PM

← 说说你对多态的理解? Java中的final关键字可以修饰什么?被final修饰后有什么特点? →

评论

验证登录状态...

侧边栏
夜间
卡码简历
代码随想录
卡码投递表🔥
2026群
添加客服微信 PS:通过微信后,请发送姓名-学校-年级-2026实习/校招
支持卡码笔记
鼓励/支持/赞赏Carl
1. 如果感觉本站对你很有帮助,也可以请Carl喝杯奶茶,金额大小不重要,心意已经收下
2. 希望大家都能梦想成真,有好的前程,加油💪