Java 中的@Override

Rupam Yadav 2023年1月30日 2021年7月1日
  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
Author: 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