程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java6的@override注解與Java5不同之處

Java6的@override注解與Java5不同之處

編輯:關於JAVA

首先看一下下面的示例代碼 :

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的支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved