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的支持。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值