【JAVA】关于重写(Override)与重载(Overload)

重载(Overload)和覆盖(Override)是面向对象编程中的两个概念,但它们有着本质的不同:

  1. 重载(Overload): 是指在同一个类中,允许存在多个同名方法,这些方法的参数类型、参数个数或者参数顺序不同。方法重载可以让类以相同的方式处理不同类型的数据。
  2. 覆盖(Override): 是指子类继承父类的方法后,可以根据需要对方法进行重新定义。覆盖的方法必须具有相同的方法名、参数列表以及返回值类型。

Java中重载的规则:

  • 在同一个类中。
  • 方法名必须相同。
  • 参数类型、参数个数、参数顺序至少有一个不同。
  • 返回类型可以相同也可以不同。
  • 可以有不同的访问修饰符。

Java中覆盖的规则:

  • 子类方法的返回类型、方法名和参数必须与父类被覆盖的方法相同。
  • 子类方法不能缩小父类方法的访问权限。
  • 方法可以声明为 final 或 static,如果声明为 final,则不能被覆盖;如果声明为 static,则不能被覆盖为非 static。

下面是一个重载和覆盖的例子:




class A {
    void foo() {
        System.out.println("foo() in A");
    }
 
    void foo(int i) {
        System.out.println("foo(int i) in A: " + i);
    }
}
 
class B extends A {
    @Override
    void foo() {
        System.out.println("foo() in B");
    }
 
    // 这个方法是重载,不是覆盖,因为参数列表不同
    void foo(int i, int j) {
        System.out.println("foo(int i, int j) in B: " + i + ", " + j);
    }
}
 
public class OverloadExample {
    public static void main(String[] args) {
        A a = new A();
        a.foo();      // 调用 A 类的 foo()
        a.foo(1);     // 调用 A 类的 foo(int i)
 
        B b = new B();
        b.foo();      // 调用 B 类的 foo(),覆盖了 A 类的 foo()
        b.foo(1);     // 调用 A 类的 foo(int i),重载而非覆盖
        b.foo(1, 2);  // 调用 B 类的 foo(int i, int j),重载而非覆盖
    }
}

在这个例子中,类 A 和类 B 分别定义了两个同名方法 foo(),一个带有 int 参数,一个不带参数。类 B 继承自类 A 并覆盖了 foo() 方法,同时还定义了一个重载的 foo(int i, int j) 方法。在 main 方法中,我们创建了 A 和 B 的实例,并分别调用了它们的方法,以此来展示重载和覆盖的不同。

最后修改于:2024年08月13日 18:22

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日