`
nudtgk2000
  • 浏览: 71064 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JAVA中 @Override 的作用(转)

    博客分类:
  • Java
阅读更多

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

 

如果想重写父类的方法,比如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 的支持

分享到:
评论

相关推荐

    java关于@override.md

    对Java中@override个人理解阐述,希望能帮大家更好理解。

    详解Java中@Override的作用

    主要介绍了详解Java中@Override的作用的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下

    分享一下@Override标签背后的小秘密

    很好很好的Java知识,一个关于Java标签的技术知识,非常的好用哦

    android @override 报错解决方案

    android @override 报错:就是说Java 1.5的编译器默认对父类的方法进行覆盖,采用@Override进行说明;但1.6已经扩展到对接口的方法;所以如果还是以Java 1.5的编译器来编译的话,会出现错误

    Java重写(Override)&重载(Overload).pdf

    Java面向对象编程中的重写(override)指的是子类可以重写其父类中的非private方法,使得子类在调用该方法时会使用自己的实现而不是父类的实现。 重写(Override)讲解 定义一个名为 Animal 的父类和一个名为 Cat 的...

    Java注释@interface的用法

    java用 @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类。 @Override,@Deprecated,@SuppressWarnings为常见的3个注解。 注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记...

    java用填充多边形的方法填充一个三角形Demo

    java用填充多边形的方法填充一个三角形 主要代码: Icon icon = new Icon() { @Override public void paintIcon(Component c, Graphics g, int x, int y) { Graphics2D g2d = (Graphics2D) g; ...

    Java实现的树以及包含树的内存缓存框架

    java.util竟然没有提供树(数据结构)的实现!让我这种拿来主义的懒人很不开心。 随手写了一个TreeNode,顺道实现了个对应的内存缓存框架,适用于数据量不大,更新也少但是反复要读的数据,比如模块信息/组织结构/...

    Android代码-Android-CropView

    导入lib-cropview并在AndroidManifest.xml中添加Activity * 实现CropperHandler并实现方法 ```java @Override public Activity getActivity() { return this; } @Override public CropperParams getParams...

    my java unit

    java package com.myunit; import testapi.ITestAgent.TestLog; @TestClass public abstract class ITestFixture extends MyAssert implements ISubject { IObserver iobs = null; public ITestFixture() { } ...

    java代码-Override

    java代码-Override

    java servlet 监听器

    * 从HttpServletRequestWrapper包装类中取出我们要进行转码的request; * * @return */ public HttpServletRequest getHttpServletRequest() { return (HttpServletRequest) super.getRequest(); ...

    java中redis锁的封装

    语言:java 内容:封装好的redis锁 使用场景: 1.并发情况下 2.对某个字段状态的处理 3.支付回调,重复收到回调数据 使用方法: Object result = redisLockTemplate.execute("REDIS:LOCK:" + id, 1, TimeUnit....

    观看韩顺平学习整理java的笔记到异常

    帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 main()方法 4 代码块 4 代码块使用注意事项和细节 5 单例模式 6 final...

    Annotation--学习:JDK内建Annotation

    NULL 博文链接:https://lansky07.iteye.com/blog/289007

    Machinetool Java项目

    import java.io.IOException; /** * Created by GuoFeng on 2016/2/21. TODO 登陆验证拦截类 拦截所有html请求 进行登陆验证 */ public class LoginFilter implements Filter{ @Override public void init...

    枚举 猜拳游戏

    @Override public String toString() { return "布 "; } }, SCISSORS(WIN, DRAW, LOSE) { @Override public String toString() { return "剪刀"; } }, ROCK(LOSE, WIN, DRAW) { @Override public ...

    Android实验报告生命周期.doc

    } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.out.println("AlifecycleActivity:onDestroy()"); } @Override protected void onPause() { // TODO ...

    java代码-Override2

    java代码-Override2

Global site tag (gtag.js) - Google Analytics