JAVA中 @Override 的作用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > JAVA中 @Override 的作用

JAVA中 @Override 的作用

 2012/6/29 16:37:12  yangactive  程序员俱乐部  我要评论(0)
  • 摘要:如果想重写父类的方法,比如toString()方法的话,在方法前面加上@Override系统可以帮你检查方法的正确性,@OverridepublicStringtoString(){...}这是正确的一旦写错写成这样@OverridepublicStringtostring(){...}编译器可以检测出这种写法是错误的这样能保证你的确重写的方法正确而如果不加@OverridepublicStringtostring(){...}这样编译器是不会报错的它只会认为这是你自己新加的一个方法而已---
  • 标签:ide Java

如果想重写父类的方法,比如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不是这样认为的,不知道这是当初jdk5bug,还是当初就是认为覆盖父类方法与实现接口方法是不一样的,不得而知。但是从OO角度来看,覆盖父类方法与实现接口方法都可以认为override,因为他们目的都是一样的,都是为了重用,都是多态的一种表现方式。这从jdk6的支持这个功能就可以看出。

  差一点忘了:

  标准的java?api文档java5java6Override?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文档没有提到Overrideinterface的支持。

发表评论
用户名: 匿名