java中重寫父類方法加不加@Override詳解

java重寫父類方法加不加@Override

這個是我在剛學習java時遇到的問題,希望能給像我一樣的新手學習時帶來幫助,如有錯誤請指正,謝謝!

class Father{
    public String name;
    public int age;
    public Father(){
    }
    public void work(){
        System.out.println("蓋房子");
    }
}
class Son extends Father{
    public int weight;
    public Son(){
    }
    public void work(){
        System.out.println(i);
    }
}

上面子類的work()方法和基類work()方法的控制器類型(包括返回值類型、參數等)是完全一致的,這種情況加不加@Override都是可以的,都可以對基類方法進行重寫。

因為不寫的情況下,java虛擬機會進行自動識別。

class Son extends Father{
    public int weight;
    public Son(){
    }
    public int work(int i){
        System.out.println();
    }
}

在上面這種情況下,work()方法會被系統認為是子類新定義的方法,沒有繼承基類,這也是被允許的。

class Son extends Father{
    public int weight;
    public Son(){
    }
    public int work(){
        System.out.println();
        return 1;
    }
}

但是這種情況隻修改返回值類型時,是不被允許的,其仍被看做基類的重寫,但是返回值類型變瞭,就會被編輯器認為基類重寫返回值類型不一致而報錯。

所以存在即合理,在編寫代碼時如果需要對基類進行重寫還是加上@Override比較好,還可以檢測一些容易忽略的錯誤。

@Override的作用

@Override是偽代碼,表示重寫(當然不寫也可以),不過寫上有如下好處:

1、可以當註釋用,方便閱讀

2、編譯器可以給你驗證@Override下面的方法名是否是你父類中所有的,如果沒有則報錯。

例如,你如果沒寫@Override,而你下面的方法名又寫錯瞭,這時你的編譯器是可以編譯通過的,因為編譯器以為這個方法是你的子類中自己增加的方法。

舉例:在重寫父類的onCreate時,在方法前面加上@Override 系統可以幫你檢查方法的正確性。

@Override
public void onCreate(Bundle savedInstanceState)
{…….}

這種寫法是正確的,如果你寫成:

@Override
public void oncreate(Bundle savedInstanceState)
{…….}

編譯器會報如下錯誤:

The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method

以確保你正確重寫onCreate方法(因為oncreate應該為onCreate)。

而如果你不加@Override,則編譯器將不會檢測出錯誤,而是會認為你為子類定義瞭一個新方法:oncreate

加不加@override有什麼區別

1.簡單來說@override註解是告訴編譯器,下面的方法是重寫父類的方法

2.如果不寫@override註解去直接重寫方法,編譯器是不會判斷你是不是正確重寫瞭父類中的方法的。

如重寫方法時參數與父類不同,程序是不會提示報錯的。這會留下一個潛在的bug。

當你寫瞭@override註解時,程序會判斷你是否正確的重寫瞭父類的對應方法。

而且加上此註解後,程序會自動屏蔽父類的方法。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: