@Override注解的使用

先看看@Override注解在Java SE中的声明:

package .lang;

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

由Java源代码声明我们了解到:@Override注解,只能用于标记方法,并且它只在编译期生效,不会保留在class文件中。

@Override注解标记的方法声明,如果没有覆写或者实现超类的方法声明,或者不是覆写Object的public方法,那么编译就会报错。使用@Override注解,有助于我们尽早发现这样的错误:本来想声明一个“覆写”方法,却偶然声明成“重载”方法。

最经典的例子就是equal方法:

package org.springmorning.demo.javabase.annotation.pre;

/**
 * @author 春晨
 * @date 2019/1/14 20:25
 * Copyright ©2019 春晨 https://www.cnblogs.com/springmorning/p/10280122.html
 */
public class Book {

    private String name;

    public boolean equals(Book book){
        return this.equals(book.name);
    }

}

本意是想声明equals方法覆写Object类的equals方法,然而上例声明的equal方法并没有覆写Object类的equals方法,而是对equals方法重载,并且继承Object的equals方法,这样就导致微妙的bug。但是如果在上例equals方法上标记@Override注解,那么编译器就会报错,提示此方法并不是对Object的equals方法的覆写。

如下代码就体现了@Override的作用:

package org.springmorning.demo.javabase.annotation.pre;

/**
 * @author 春晨
 * @date 2019/1/14 20:25
 * Copyright ©2019 春晨 https://www.cnblogs.com/springmorning/p/10280122.html
 */
public class Book {

    private String name;

    /**
     * 标记Override,会报错,因为这是equals方法重载
     */
    @Override
    public boolean equals(Book book){
        return this.name.equals(book.name);
    }

    /**
     * 覆写Object的equals方法
     */
    @Override
    public boolean equals(Object book){
        return this.name.equals(((Book)book).name);
    }

}

还有一种比较特殊的情况,在接口声明的方法上使用@Override,这种情况是等同覆写Object的公共方法:

package org.springmorning.demo.javabase.annotation.pre;

/**
 * @author 春晨
 * @date 2019/1/16 23:24
 * Copyright ©2019 春晨 https://www.cnblogs.com/springmorning/p/10280122.html
 */
public interface Animal {

    @Override
    int hashCode();

    @Override
    boolean equals(Object o);

    @Override
    String toString();

}

注意:只能覆写Object示例中的三个方法,对于protected finalize()方法或者final修饰的方法是不能覆写的。

下节继续

下节将给大家讲解预定义注解@SuppressWarnings的使用

原文地址:https://www.cnblogs.com/springmorning/p/10280122.html

时间: 2024-08-06 15:23:51

@Override注解的使用的相关文章

@Override注解

它的作用是对覆盖超类中方法的方法进行标记,如果被标记的方法并没有实际覆盖超类中的方法,则编译器会发出错误警告. /** * 测试Override注解 * @author Administrator */ public class OverrideDemoTest { //@Override public String tostring() { return "测试注解"; } }

【代码优化】坚持使用Override注解

对于传统程序员,注解里面最重要的就是Override注解了.这里的注解,都是指只能用在方法中的声明, 她表示被注解的方法用于覆盖了父类的一个声明,如果坚持使用这个注解,可以防止一大类的非法错误. <span style="font-size:14px;">public class Bigram{ private final char first: private final char second: public Bigram (char first ,char secon

第36条:坚持使用Override注解

@Override 注解只能用在方法声明中,表示被注解的方法声明覆盖了超类型中的一个声明. @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { } @Target指定注解只作用在方法 @Retention指定注解在编译的时候会被丢弃 应该在想要覆盖超类声明的每个方法声明中使用Override注解,这样当想要覆盖的方法没有被覆盖时,编译器能提示错误,大大减少方法覆盖失

学习笔记---使用override注解

在学习或者做东西,都懒得动手记,得习惯记下来才好... 最近在看<Effective Java>,确实对我有很大的提高,把自己看到和想到的东西写下来,标记... 1. 坚持使用override注解. 1 public class Bigram { 2 3 private final char first; 4 private final char second; 5 public Bigram(char first,char second) { 6 this.first = first; 7

@Override注解在Eclipse中编译报错

导入新工程后,发现默认用的jre是1.5版本的,在Eclipse中右击工程选择Build Path->点击Configure Build Path->Java Build Path->点击JRE System Library后点击Edit->jdk1.8版本,点击Finish,点击OK. 但发现工程里有个java文件有红叉叉,提示要移除Override注解.这个问题是jdk1.5版本才有,1.6版本以上已经解决.在Eclipse中右击工程选择Build Path->Confi

在接口的实现类里使用@Override注解报错

问题分析 @Override注解用来检测子类对父类或接口的方法的重写是否正确,但有一次我在Eclipse里对接口的实现类里使用@Override注解却报错,不过在父类的子类里使用该注解却是正常的. 百度了下才知道原来这是jdk1.5时的一个bug,在1.6时已经被修复:那么问题来了,我使用的jdk是1.8,为什么会报这个错误?明明之前也在接口的实现类里用过该注解,却没问题.由于Eclipse经常抽风,我怀疑是Eclipse的问题,经过排查确实如此,该项目使用的jdk版本不知道为什么变成了jdk1

java.lang.Override注解

@Override注解的作用 当你想重写父类的某个方法时,它可以帮你检查方法的正确性. 举例说明 比如说我们重写父类的toString()方法,但我们现在将toString这个方法名拼错了,这是它会在IDE中发出一个警告,告诉我们该方法名拼写有问题,也或者是该方法的类型与父类对应的方法类型不匹配,也是会发出警告的. 原文地址:https://www.cnblogs.com/youpeng/p/11505129.html

接口的实现类不支持@Override注解,提示移除

写了一个接口的实现类,在方法的前面加了@Override居然报错了,要求移除这个注解.据说这个是JDK的版本问题,@Override在JDK5就已经有了,但是有一个小小的BUG就是不支持对接口的实现,认为这不是Override而JDK6修正了这个BUG,无论是对父类的方法覆盖还是对接口的实现都可以加上@Override. 首先要确保安装jdk1.6,然后在eclispe中修改配置,在windows->preferences->java->complier->compiler com

Java魔法堂:注解用法详解——@Override

一.前言 现在有Son和Parent两个类,且类型Son将会重写类型Parent的getName函数.但不幸的是由于码农大意,写成如下代码: public class Parent{ public String getName(){ return "Parent"; } } public class Son extends Parent{ public String getNames(){ return "Son"; } } 上述代码编译通过且人工无意识到实现错误,