当前位置:首页 > Java

java如何分辨覆盖

2026-03-18 05:03:24Java

方法重写(Override)与重载(Overload)的区别

重写(Override)
发生在子类与父类之间,子类重新定义父类中已有的方法。要求方法名、参数列表、返回类型完全相同(协变返回类型除外),且访问权限不能比父类更严格。使用 @Override 注解可显式标记。

重载(Overload)
发生在同一类中,方法名相同但参数列表(类型、顺序、数量)不同。返回类型和访问修饰符可不同,与继承无关。

java如何分辨覆盖

覆盖的判定条件

  • 方法签名一致:方法名、参数类型及顺序必须完全相同。
  • 返回类型协变:子类方法的返回类型可以是父类方法返回类型的子类。
  • 访问权限不更严格:子类方法的访问修饰符不能比父类更严格(如父类为 protected,子类不能为 private)。
  • 异常限制:子类方法抛出的检查异常不能比父类更多或更宽泛。

示例代码

class Parent {
    protected void display() {
        System.out.println("Parent display");
    }
}

class Child extends Parent {
    @Override
    public void display() { // 正确覆盖:访问权限更宽松
        System.out.println("Child display");
    }

    // 以下不是覆盖,是重载
    public void display(String msg) {
        System.out.println("Overloaded: " + msg);
    }
}

常见误区

  • 静态方法(static)不能被覆盖,隐藏(hide)机制替代。
  • 私有方法(private)和 final 方法无法被覆盖。
  • 参数列表不同时,即使方法名相同也属于重载而非覆盖。

通过以上规则和示例可清晰分辨 Java 中的方法覆盖。

标签: java
分享给朋友:

相关文章

java如何创建线程

java如何创建线程

创建线程的方法 在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行安…

如何编译java

如何编译java

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证是否安装成功。若未安装,需从Oracl…

java如何产生随机数

java如何产生随机数

使用 Math.random() 方法 Math.random() 生成一个范围在 [0.0, 1.0) 的伪随机 double 值。通过缩放和偏移可以生成指定范围的随机数。 double ra…

java如何实现异步

java如何实现异步

Java实现异步的方法 Java中实现异步编程可以通过多种方式,每种方式适用于不同的场景和需求。以下是常见的实现方法: 使用Thread类 创建新线程执行异步任务是最基础的方式。通过继承Thread…

java中如何输入

java中如何输入

输入方法 在Java中,可以通过多种方式实现输入操作,具体取决于输入来源和需求。以下是几种常见的输入方法: 使用Scanner类 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读…