2011-05-18 52 views
0

Im新的android開發。我想知道爲什麼我們必須在android?中使用@Override註釋前面的每個overriden方法。在常規的java中,這不是必需的。關於@Override註釋的問題

請幫助 感謝

回答

4

@Override符號是用來使編譯器可以警告你,如果方法簽名是不一樣的超類的方法簽名。它可以警告你有關繁瑣的錯誤,並且它在Android中不是必需的,但在「普通」Java編程和Android編程中都是很好的做法。

如果你在「正常」的Java拼寫錯誤的toString方法,例如public String toString(int n) {...}並且你有@Override編譯器會警告你,因爲你不重寫超類中的方法。

+0

其實,你不能做「public int toString(){...}」,因爲編譯器會拋出一個錯誤。錯誤是「嘗試使用不兼容的返回類型」。但是,如果你做toString(int i),那麼你的答案是正確的。 – 2011-05-18 18:55:39

+0

@阿米爾:是的,當然不好的例子。我會更正它,謝謝:) – LuckyLuke 2011-05-18 18:59:06

0

因爲這是一個很好的編程習慣。在未使用@Override的情況下重寫方法會導致未來發現潛在的難以發現的錯誤,如果基本方法的簽名發生變化(我之前浪費了幾個小時的時間)。

1

這是一個最佳實踐,它是安全的。假設你有一個類:

public class MyClass { 
    ... 
    ... 
    public void doSomething() { 
     ... 
     ... 
    } 
} 

現在假設你擴展它:

public class MyExtendedClass extends MyClass { 
    ... 
    ... 
    public void doSomthing() { 
    ... 
    } 
} 

這段代碼編譯,而是因爲你居然還沒有覆蓋的方法,你就會有問題!請注意拼寫錯誤。現在,如果你有@Override標註爲:

public class MyExtendedClass extends MyClass { 
    ... 
    ... 
    @Override 
    public void doSomthing() { 
    ... 
    } 
} 

Java編譯器會抱怨,因爲您要重寫不會在基類中存在的方法。基本上使用@Override可以讓您在編譯時捕獲這些問題。

這在您重構時特別有用。如果您更改了方法簽名或名稱,但沒有註釋,則某些方法可能會導致難以找到的錯誤(當然,使用現代IDE的許多此類疼痛已得到緩解,但仍然存在)。如果明智地使用@Override註釋,您現在將得到編譯器錯誤,因此您將能夠在派生類中修復方法簽名。

+0

非常感謝! :) – Jim 2011-05-18 18:54:09

+0

該代碼將不會*編譯,因爲MyExtendedClass不是抽象的,也不會覆蓋doSomething()。 – sarumont 2011-05-19 17:54:09

+0

@sarumont我今天早上才意識到。我愚蠢。我修復了它。 – 2011-05-19 17:54:41