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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn