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