2010-12-03 102 views
66
public class NaiveAlien extends Alien 
{ 

    @Override 
    public void harvest(){} 

} 

我想了解我的朋友的代碼,並且我沒有在代碼中獲得@Override的語法。這是做什麼的,爲什麼我們需要編碼? 謝謝。@Override是什麼意思?

回答

122

這是編譯器的一個暗示,讓它知道你重寫了父類(或Java 6中的接口)的方法。

如果編譯器檢測到沒有可覆蓋的函數,它會警告您(或錯誤)。

這對於快速識別錯字或API更改非常有用。假設你試圖覆蓋父類的方法harvest(),但拼出它harvset(),你的程序將默默地調用基類,沒有@Override,你不會有任何警告。

同樣,如果您使用庫,並且在庫的版本2中,harvest()已被修改爲採用整數參數,您將不再覆蓋它。再次,@Override會很快告訴你。

+14

請注意,@Override僅適用於公共和受保護的功能。 – MrMas 2013-05-09 16:01:35

+0

還應該提及的是,**多個**註釋也是可能的,並且其他代碼也可以使用這個添加。例如,在Android M應用程序中檢查權限時,就像在[PermissionsDispatcher](https://github.com/hotchemi/PermissionsDispatcher)中所做的那樣。 – not2qubit 2017-01-18 10:00:46

9

@Override表示您重寫基類方法。在java6中,它也意味着你正在從一個接口實現一個方法。當您認爲重寫某種方法但錯誤輸入某些內容時,它可以防止錯別字。

23

此功能稱爲註釋。 @Override是使用註釋讓編譯器知道「hey編譯器,我正在改變父類中的收穫」的語法,然後編譯器可以立即說出「老兄,你錯誤地命名了它」。除非您正確命名,編譯器纔會編譯。

因此,如果沒有這個@Override註釋,編譯器將不會出錯,它會被視爲新的方法聲明。在這一點上很難認識到這個錯誤。