JAVA中 @Override 的作用
如果想重寫父類的方法,比如toString()方法的話,在方法前面加上@Override 系統可以幫你檢查方法的正確性,
@Override
public String toString(){...}這是正確的
一旦寫錯 寫成這樣
@Override
public String tostring(){...}
編譯器可以檢測出這種寫法是錯誤的 這樣能保證你的確重寫的方法正確
而如果不加@Override
public String tostring(){...}這樣編譯器是不會報錯的 它只會認為這是你自己新加的一個方法而已
------------------------------------------------------------
@Override的用法:
Override:
java.lang.Override是一個marker annotation型別,它被用作標註方法。它說明了被標註的方法過載了父類的方法,起到了斷言的作用。如果我們使用了這種annotation在一個沒有覆蓋父類方法的方法時,java編譯器將以一個編譯錯誤來警示。
這個annotaton常常在我們試圖覆蓋父類方法而確又寫錯了方法名時發揮威力。
使用方法極其簡單:在使用此annotation時只要在被修飾的方法前面加上@Override。
下面的程式碼是一個使用@Override修飾一個企圖過載父類的toString方法,而又存在拼寫錯誤的sample:
清單1:
@Override public String toSting() { // 注意方法名拼寫錯了 return "[" + super.toString() + "]";}
-------------------------------------------------------
Java6的@override註解與Java5不同之處:
首先看一下下面的示例程式碼 :
Parent.java
public class Parent...{
public void parentMethod() ...{
}
}
IChild.java
public interface IChild ...{
void interfaceMethod();
}
Child.java
public class Child extends Parent implements IChild ...{
@Override
public void parentMethod() ...{
}
@Override
public void interfaceMethod() ...{
}
}
由於程式碼很簡單,我就不做說明
上述程式碼在jdk6下可以編譯通過
而在jdk5下編譯無法通過,輸出的錯誤資訊如下:
Child.java:7: 方法未覆蓋其父類的方法
@Override
^
1 錯誤
上面的錯誤資訊說在Child.java第七行的Override註解是不對的,不對的原因是該方法(interfaceMethod)不是父類方法。
當然,實際上這個方法是類實現的介面中方法,但是,這個語法的jdk6的下面是可以通過的,也就是說java6認為類覆蓋父類方法與實現介面方法都叫override,而jdk5不是這樣認為的,不知道這是當初jdk5的bug,還是當初就是認為覆蓋父類方法與實現介面方法是不一樣的,不得而知。但是從OO角度來看,覆蓋父類方法與實現介面方法都可以認為override,因為他們目的都是一樣的,都是為了重用,都是多型的一種表現方式。這從jdk6的支援這個功能就可以看出。
差一點忘了:
標準的java api文件java5與java6對Override annotation的的解釋一樣的
java5:
Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.
java6:
Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.
兩段說明一模一樣,讓人搞不清楚的是java6文件沒有提到Override對interface的支援。
相關文章
- Java 中的 override 和 overload,看這一篇就夠JavaIDE
- JAVA中initCause()的作用Java
- Java中Arrays作用Java
- java中變數的作用域Java變數
- 探究final在java中的作用Java
- Java 重寫(Override)與過載(Overload)JavaIDE
- Java中transient關鍵字的作用Java
- java中static關鍵字的作用Java
- Java-override重寫與overload過載JavaIDE
- makefile之overrideIDE
- Aura QuickAction OverrideUIIDE
- 方法重寫(Override)IDE
- 淺析Java中的雜湊值HashCode的作用及用法Java
- Java開發中操作日誌的作用和模組Java
- Java Web中requset,session,application 的作用域及區別JavaWebSessionAPP
- 一句話說明白C#中的new與override的區別C#IDE
- Java中final修飾符都有什麼作用Java
- Java中volatile副作用:不使用CPU快取Java快取
- override(重寫) and overload(過載)IDE
- C++中::的作用C++
- Tomcat中redirectPort的作用Tomcat
- MASM中Group的作用ASM
- Vue中key的作用Vue
- maven中Scope的作用Maven
- Java程式中的代理作用和應用場景及實現Java
- Java - 15 作用域Java
- JAVA註解的總結及其作用Java
- Java CompletionService 的作用與場景解析Java
- Java transient 的作用及使用方法Java
- 理解 JavaScript 中的作用域JavaScript
- vue中的css作用域VueCSS
- docker映象中json的作用DockerJSON
- ARM SMMU中 SteamTable的作用
- Spring中Bean的作用域SpringBean
- Springboot中的Bean作用域Spring BootBean
- 子類重寫父類的方法@Override的快捷鍵IDE
- toString().intern()中的intern()中的作用和使用
- Java 設計模式之外觀模式的作用Java設計模式
- 淺談Java的反射機制和作用Java反射