2011-12-17 97 views
9

在java或Android中有@Override註釋。這是什麼意思?我發現它用於方法是從子類或繼承的接口的方法,我想進一步知道和其他是@SuppressWarnings它也Anonation,如果是的Java多少使用的annonation和爲此目的。爲什麼@Override需要在Java或Android?

+3

這是一個好問題,而是......瑣碎的查找。 – 2011-12-17 15:08:38

回答

16

這個問題也回答了這裏,而且相當簡潔: Android @Override usage

這是一個註釋,你可以用它來告訴你打算是有註釋是一個覆蓋的方法編譯器和您的IDE超類方法。他們在出現錯誤時會有警告/錯誤,例如,如果您打算重寫某個方法但拼寫錯誤,如果註釋位於IDE中,或者編譯器會告訴您它實際上不覆蓋超類方法,因此您可以確定原因並更正拼寫錯誤。

這對於Android應用程序和活動來說更爲重要,例如,所有調用都將基於活動生命週期 - 並且如果您沒有正確覆蓋生命週期方法,則它們永遠不會被框架調用。一切都會很好地編譯,但你的應用程序不會按照你的意圖工作。如果添加註釋,則會出現錯誤。

換句話說,如果添加@覆蓋這可以幫助你做出確保你是真的覆蓋現有的方法!相當有用。

+1

準確,強調的那樣,註釋實際上並不在運行時做任何事情,它是誰的閱讀代碼的幫助。如果簽名與父項相同,該方法將被覆蓋或不註釋。 – stivlo 2011-12-17 15:09:32

+2

@stivlo:沒有。如果設置了Override,並且該方法不會覆蓋任何內容,則不會有任何運行時,因爲它會阻止該類進行編譯。這就是爲什麼註釋是有用的:它告訴編譯器開發人員的意圖是重寫一個方法。如果編譯器檢測到沒有重寫,它將拒絕編譯。 – 2011-12-17 15:33:10

+0

註釋是否有用於防止重複的方法相同? – 2013-05-27 10:02:42

9

覆蓋意味着您正在更改從父類繼承的方法的行爲,而不更改簽名。 @Override註釋用於標記此。它與多態的概念緊密相關。例如:

public class A { 
    public void foo() { 
     System.out.println("A"); 
    } 
} 

public class B extends A { 

    @Override 
    public void foo() { // I want to change the way foo behaves 
     System.out.println("B"); // I want to print B instead of A 
    } 
} 

public static void main(String[] args) { 
    A a = new A(); 
    a.foo(); // prints A 

    A b = new B(); // I can use type B because it extends A 
    b.foo(); // I have overriden foo so it prints B now 
} 
+0

行爲意味着我不能改變參數和返回類型 – 2011-12-17 15:00:03

+0

@Mayur Patel:是的,只有方法內的代碼。 – Tudor 2011-12-17 15:01:27

+0

Thnx這麼多的規格 – 2011-12-17 15:03:11

4

只是爲了確保您實際上在編譯時覆蓋它,並提高可讀性

例如

class Animal{ 
    public void eat(Food food){ 
    } 
} 

class Person extends Animal { 
    @Override 
    public void eat(String food){ 
    } 

} 

這會給你編譯因爲你不是實際上覆蓋它(參見食物的類型)

+0

我們可以覆蓋當前類方法? – 2011-12-17 15:00:35

+0

給我一個例子你是什麼意思的當前類方法 – 2011-12-17 15:01:56

+0

我知道,但我刪除它什麼是prblm?其跌幅可讀性 – 2011-12-17 15:04:05

0

@override其註釋,即元數據在jdk 1.6中引入。如果你在override方法之前不寫它,它不會有什麼區別,但它只是用來增加編譯器的可讀性。

+0

1.5中引入了包含'@ Override'的註解。目的是確保你實際上覆蓋了你認爲自己的東西,而不是「增加編譯器的可讀性」。 – 2011-12-17 15:07:45

0

標記您確實實施或更改方法。就像在編譯時檢查一樣。例如,如果您要實施@Override public void equals(final Car pObject);而不是@Override public void equals(final Object pObject);,則會出現錯誤。

0

這聽起來像你的問題是關於一般註釋更多,所以我會回答。註釋提供有關正在註釋的項目的額外元數據。這允許其他代碼使用該信息來決定如何運行。 More detailed description。語言中有大量的內容,但你可以自己寫。你給

兩個例子告訴它編譯代碼編譯器的額外信息。當它看到@Override時,它會檢查以確保該方法實際上覆蓋了一個方法。當它看到@SuppressWarnings時,它知道它應該忽略代碼塊中存在的給定類型的編譯器警告。

他們可以在戶外使用的編譯器爲好。有許多庫可以註釋一個類對象,並使用該元數據構建數據庫或解析xml文件。