From Gossip@Openhome

Java Gossip: 限定 Override 父類方法 - Override

java.lang.Override是J2SE 5.0中標準的Annotation型態之一,它對編譯器說明某個方法必須是重新定義父類別中的方法,編譯器得知這項資訊後,在編譯程式時如果發現該方法 並非重新定義父類別中的方法,就會回報錯誤。

舉個例子來說,如果您在定義新類別時想要重新定義toString()方法,您可能會寫成這樣:

  • CustomObject.java
public class CustomObject {
public String ToString() {
return "customObject";
}
}

在撰寫toString()方法時,您因為打字錯誤或其它的疏忽,將之打成了ToString(),但您編譯這個類別時並不會出現任何的錯誤,編譯器只當 您是定義了一個新的ToString()。

您可以使用java.lang.Override這個Annotation型態,在方法上加上一個@Override的Annotation,告訴編譯器 您現在定義的這個類別是重新定義父類別中的同名方法,例如:

  • CustomObject.java
public class CustomObject {

@Override
public String ToString() {
return "customObject";
}
}

在編譯程式時,編譯器看到@Override這個Annotation,瞭解它必須檢查這個方法是不是重新定義父類別的ToString()方法,但父類 別中並沒有這個方法,所以它會回報錯誤:
CustomObject.java:2: method does not override a method from its superclas
@Override
^
1 error

重新修改一下程式,編譯時就不會有問題了:

  • CustomObject.java
public class CustomObject {

@Override
public String toString() {
return "customObject";
}
}

java.lang.Override是個Marker annotation,簡單的說就是用於標示,annotation名稱本身即包括了要給工具程式的資訊。