Java 中的@Override

Rupam Yadav 2023年10月12日
  1. Java 中覆盖和重载的区别
  2. Java 中的@Override 注解
Java 中的@Override

在本指南中,我们将深入探讨 Java 中的覆盖主题和 @override 注释。覆盖是一个概念,其中子类具有与其父类相同的方法。这个概念是运行时多态的一个例子。

Java 中覆盖和重载的区别

覆盖经常与另一个称为重载的类似术语混淆。在进一步讨论之前,让我们在下表中查看它们之间的显着差异。

方法覆盖 方法重载
方法应该具有相同的名称和签名 方法必须具有相同的名称但不同的签名
这是运行时多态的一个例子 这是编译时多态的一个例子
所有方法的返回类型必须相同 返回类型可能相同也可能不同
覆盖发生在两个或多个类之间 重载发生在同一个类中
参数应该是一样的 参数应该不同

Java 中的@Override 注解

@Override 注释告诉 Java 编译器我们要覆盖超类中的方法。尽管每当我们想将其实现到进程时都没有必要使用@Override,但我们建议使用它,因为我们在创建方法时可能会出错。例如,我们可能会在子类中提供不同的参数,这会使其重载而不是覆盖。

为了克服这个错误,我们在子类中的方法名称上方使用@Override,告诉编译器我们要覆盖该方法。如果我们犯了任何错误,编译器就会抛出错误。

在下面的示例中,我们有四个类。OverrideJava 类是 main() 方法所在的位置,并且其他类的方法将使用它们的对象调用。然后我们还有其他三个类,其中 FirstClass 有一个名为 method1() 的方法,里面有一个打印消息。最后,SecondClass 类扩展了使用继承概念的 FirstClass。在这里,我们使用与其父类相同的方法名称和签名 method1(),如 FirstClass

请注意,在 SecondClass 类中,我们使用了 @Override 注释。接下来,我们扩展 ThirdClass 类中的 SecondClass,并使用带有注释的 method1() 方法。为了检查哪个方法被调用,我们创建了一个 ThirdClass 的对象,它是子类,并调用 method1()。在输出中,我们观察到 ThirdClass 中的方法被调用,因为子级在父级之后更改了内部实现。

public class OverrideJava {
  public static void main(String[] args) {
    ThirdClass thirdClass = new ThirdClass();
    thirdClass.method1();
  }
}

class ThirdClass extends SecondClass {
  @Override
  void method1() {
    System.out.println("Overriding method1 in Third Class");
  }
}

class SecondClass extends FirstClass {
  @Override
  void method1() {
    System.out.println("Overriding method1 in Second Class");
  }
}

class FirstClass {
  void method1() {
    System.out.println("This is method1");
  }
}

输出:

Overriding method1 in Third Class

如果我们想调用父类的 method1() 而不是子类,我们可以使用调用其超类的 method1()super.method1()。输出显示,在 ThirdClass 中,首先调用它的父类,即 SecondClass 方法,然后调用它自己的实现。

public class OverrideJava {
  public static void main(String[] args) {
    ThirdClass thirdClass = new ThirdClass();
    thirdClass.method1();
  }
}

class ThirdClass extends SecondClass {
  @Override
  void method1() {
    super.method1();
    System.out.println("Overriding method1 in Third Class");
  }
}

class SecondClass extends FirstClass {
  @Override
  void method1() {
    System.out.println("Overriding method1 in Second Class");
  }
}

class FirstClass {
  void method1() {
    System.out.println("This is method1");
  }
}

输出:

Overriding method1 in Second Class
Overriding method1 in Third Class
作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn