@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的使用

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM