2012-01-16 71 views
3

可能重複:
When do you use Java's @Override annotation and why?
Java, What does @Override mean?@Override在此Java代碼中的含義是什麼?

我被檢查出Drools的規劃師實例源代碼,我遇到的代碼來是這樣的:

@Override 
protected Solver createSolver() { 
    XmlSolverConfigurer configurer = new XmlSolverConfigurer(); 
    configurer.configure(SOLVER_CONFIG); 
    return configurer.buildSolver(); 
} 

protected Solver createSolverByApi() { 
    // Not recommended! It is highly recommended to use XmlSolverConfigurer with an XML configuration instead. 
    SolverConfig solverConfig = new SolverConfig(); 

    solverConfig.setSolutionClass(NQueens.class); 
    .....TRUNCATED.... 
    solverPhaseConfigList.add(localSearchSolverPhaseConfig); 
    solverConfig.setSolverPhaseConfigList(solverPhaseConfigList); 
    return solverConfig.buildSolver(); 
} 

由於據我所知當你明確地調用它們時,createSolver()createSolverByApi()應該返回Solver對象。

@Override這是什麼意思? @術語的一般含義是什麼?


編輯:我很不好;我無意中複製了What does @Override mean?

+3

至少可以使* *一些企圖在閱讀文檔... http://docs.oracle .com/javase/6/docs/api/java/lang/Override.html – skaffman 2012-01-16 07:35:34

回答

8

@Java Annotations

@Override意味着該方法覆蓋父類(在本例中爲createSolver)。

@OverrideJavadoc狀態:

表示一個方法聲明打算重寫超類中的方法 聲明。

此註釋對於編譯時檢查來驗證您覆蓋的方法是否有效(正確覆蓋)很有用。

+0

那麼,如果沒有這個,一個方法可以被覆蓋嗎?如果在方法意圖覆蓋另一個方法時排除了這種情況會發生什麼? – 2016-11-04 04:00:44

+0

無需註釋即可覆蓋。它只是幫助開發人員知道有一個父類方法已被子類覆蓋。 – 2016-11-04 09:06:36

2

這被稱爲Annotation。它實際上並未編譯成特殊代碼,但它有助於避免錯誤:實質上,它表示方法優先於的方法superclass。沒有這個註釋會導致警告,有這個註釋,但沒有超類具有相同註釋的方法甚至是錯誤

這樣可以避免重構錯誤:如果superclass中的方法被重命名,並且覆蓋不成立,那麼它將成爲錯誤。

+0

編譯器沒有特別的意義......如果編譯器沒有給它賦予特殊的含義,它怎麼會產生編譯錯誤。看到我的答案。它在'編譯器使用的註釋'一節中進行了討論,因此編譯器肯定具有特殊含義 – Robin 2012-01-16 07:38:11

+0

如:無運行時間保留AFAIK。 – 2012-01-16 07:54:06

+0

@ Anony-Mousse很好的解釋+1我也編輯過你的答案,正確拼寫 – SpringLearner 2013-10-12 04:30:05

3

請參閱Java tutorial about annotations,此處有'編譯器使用的註釋'部分。相關部分的快速複製粘貼

@覆蓋 - @Override註釋通知編譯器該元素意圖覆蓋在超類中聲明的元素(覆蓋方法將在標題爲「接口和繼承「)。

0

這是java的註釋,你的情況,你會用@Override上述的方法,以確保您覆蓋超類的方法,如果你用它和方法是不是在超類,因爲您鍵入它名稱錯誤,例如編譯時會發生錯誤。

0

我想補充一點:在一個超類或方法聲明 在接口中聲明(因爲Java 6中)

+0

不,從Java 5開始引入了註釋。自@ Java 5以來引入了@ @ Override'(Joshua Bloch)。 – 2012-01-16 07:44:08

+0

自java 5以來在superClass中聲明5 並在接口中聲明自java6 – Benoit 2012-01-17 11:07:05