2013-11-02 30 views
0

比方說,我有我的runnable這種方法。 我總是刪除@override。但是我想知道這是否有負面影響? 我試圖搜索,但沒有發現任何東西。有沒有區別有/無@override java

@Override 
public void run() { 
    while (running) { 

    } 
} 
+1

'我搜索了很多'。真? http://bit.ly/xMBQE5 – Simon

+0

@Simon你需要保持Override方法,它不會導致任何衝突,我會假設。它允許你聲明一個稍後變成超類的方法。在你的程序和你的子類中創建一個你可能會多次使用的類的實例,理論上這個類可以在另一個.java文件中,然後調用原始方法。例如,你可以綁定一個由按鈕打開的JFrame,之後在子類中覆蓋,調用相同的方法,但創建一個顯示不同內容的靜態實例。所以在1.java中創建一個基本的可重用模板。 – 2015-07-15 03:06:56

+0

但是你想要做的是重寫像已經調用其他類的ActionEvent這樣的東西,因爲我不認爲Java着重於允許你在eachother內寫入它們。後面的聽衆有時會通過,如果你刪除一個結束括號,但字面上1%的時間。 – 2015-07-15 03:18:10

回答

0

可以,但是這將禁用編譯時檢查,並使得它的可讀性。 由於它不會花費任何費用,因此您不應該花費任何精力來刪除註釋。

1

功能上,沒有區別。

但是,通過註釋,您將得到添加的檢查結果,即有一個run()方法可以覆蓋,這可以在您未使用您認爲正在使用的接口的情況下捕獲錯誤。

5

@Override註釋不會對你的產品代碼任何區別。事實上,標註甚至沒有在類的Java字節碼進行編碼,這是對註解的定義中指出:

@Target(value=METHOD) 
@Retention(value=SOURCE) 
public @interface Override 

這只是保留在源代碼。

那麼有什麼意義?那麼這是在編譯時檢查的東西。這允許你聲明你有意在超類中重寫一個方法。

您會注意到,如果將@Override註釋添加到不覆蓋父方法的方法中,那麼您將收到編譯錯誤。

這背後的想法是,如果要擴展從第三方庫的一類,並重寫它的方法之一,那麼你需要的,如果這個方法不存在被警告。考慮升級您使用的外部庫的版本,而不是void run()該方法現在是void run(String threadName)

在這種情況下,您的重寫方法永遠不會被調用,因爲它不再覆蓋父方法(不是最好的例子,因爲您正在實現一個接口 - 所以編譯將失敗,但想象一下,如果它是一類)。

當你從覆蓋類的方法,以及接口(雖然這是隻在Java 1.6及以上版本支持)這個註解可以設置。

0

如果加上一句,你是隱告訴編譯器,你是從一個超類型,從而導致使檢查與超類中的同名方法覆蓋的方法。這意味着如果你拼寫錯誤或者方法沒有相同的返回類型,編譯器會告訴你。

相關問題