java注解@Override用法举例详解

 更新时间:2024年12月26日 10:53:41   作者:飞滕人生TYF  
这篇文章主要介绍了java注解@Override用法的相关资料,@Override 是Java中的一个注解,用于表明一个方法重写了父类或接口中的方法,它可以帮助编译器检查方法签名是否正确,避免拼写错误或参数列表不一致导致的低级错误,需要的朋友可以参考下

在 Java 中,@Override 是一个注解(Annotation),用于检查和表明一个方法重写(Override)了其父类或接口中的方法。

1. 什么是 @Override

定义

  • @Override 是 Java 的一种 注解,表明子类中的方法重写了父类中的方法或者实现了接口中的方法。
  • 它主要是为了增强代码的可读性和可靠性。

语法

@Override
public 返回类型 方法名(参数列表) {
    // 方法实现
}

作用

  • 编译器校验
    • 编译时检查方法是否正确地重写了父类或接口中的方法。
    • 如果方法签名不匹配,编译器会报错。
  • 提升代码可读性
    • 明确标识出哪些方法是重写方法,方便代码维护。
  • 避免低级错误
    • 避免因为拼写错误或参数列表不同导致意外的方法重载(Overload)。

2. @Override 的用法

(1) 重写父类方法

当子类重写父类中的方法时,可以使用 @Override 注解。

示例代码

class Parent {
    public void display() {
        System.out.println("父类方法");
    }
}

class Child extends Parent {
    @Override
    public void display() { // 正确重写
        System.out.println("子类重写方法");
    }

    // @Override
    // public void Display() { // 编译报错:方法名错误
    // }
}

public class OverrideExample {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.display(); // 输出:子类重写方法
    }
}

注意事项

  • 方法名、返回类型和参数列表必须与父类中的方法完全一致。
  • 子类方法的访问修饰符不能比父类方法更严格。

(2) 实现接口方法

当类实现接口中的方法时,也可以使用 @Override 注解。

示例代码

interface Greeting {
    void sayHello();
}

class Person implements Greeting {
    @Override
    public void sayHello() { // 正确实现
        System.out.println("Hello!");
    }
}

public class InterfaceExample {
    public static void main(String[] args) {
        Greeting person = new Person();
        person.sayHello(); // 输出:Hello!
    }
}

注意事项

  • 接口中的方法默认是 public abstract,实现时必须声明为 public
  • 如果省略 @Override 注解,代码仍然可以运行,但缺少编译期的校验。

(3) 重写 Object 类方法

Java 中所有类都继承自 Object 类,可以重写其方法,例如 toString()equals() 和 hashCode()

示例代码

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() { // 重写 toString 方法
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class ObjectOverrideExample {
    public static void main(String[] args) {
        Person person = new Person("Alice", 25);
        System.out.println(person); // 输出:Person{name='Alice', age=25}
    }
}

3. @Override 注解的常见错误

(1) 方法名拼写错误

如果子类方法与父类方法的名字不一致,则不会被认为是重写方法。

错误示例

class Parent {
    public void display() {}
}

class Child extends Parent {
    @Override
    public void Display() { // 编译报错:找不到父类方法
    }
}

(2) 参数列表不同

参数列表不一致时,方法会被视为重载而不是重写。

错误示例

class Parent {
    public void display(String msg) {}
}

class Child extends Parent {
    @Override
    public void display() { // 编译报错:方法签名不匹配
    }
}

(3) 修饰符权限更严格

子类方法的访问修饰符不能比父类方法更严格。例如,父类方法是 public,子类方法不能是 protected 或 private

错误示例

class Parent {
    public void display() {}
}

class Child extends Parent {
    @Override
    protected void display() { // 编译报错:访问修饰符更严格
    }
}

4. @Override 的好处

(1) 提高代码可读性

通过 @Override 注解,其他开发者可以清晰地看到哪些方法是重写的。

(2) 编译期校验

编译器会自动检查方法是否正确地重写父类或接口中的方法,避免低级错误。

(3) 方便代码维护

当父类或接口中的方法发生变化时,使用 @Override 的方法会及时报错,提醒开发者修改对应的实现。

5. @Override 是否必须使用?

(1) 可选但推荐使用

  • 如果不使用 @Override 注解,重写方法仍然有效。
  • 但省略 @Override 会丧失编译器的校验功能,容易导致意外的错误(如方法名拼写错误或参数列表不一致)。

示例代码

class Parent {
    public void display() {}
}

class Child extends Parent {
    public void display() { // 可以省略 @Override,但不推荐
    }
}

6. @Override 注解的局限性

(1) 仅适用于方法

  • @Override 只能用于方法,不能用于字段或构造器。

错误示例

class Parent {
    public int value;
}

class Child extends Parent {
    @Override // 编译报错:不能用于字段
    public int value;
}

(2) 无法检测接口默认方法的实现

  • 接口中的 default 方法重写时,@Override 并非强制。

7. 总结

使用 @Override 的必要性

场景是否必须使用 @Override原因
子类重写父类方法推荐使用提升代码可读性,避免拼写错误
实现接口方法推荐使用确保实现方法符合接口定义
重写 Object 类方法强烈推荐避免无效的重写导致默认实现被调用
字段或构造器无法使用@Override 仅适用于方法

@Override 的优点

  • 提高代码的安全性(编译期检查)。
  • 提升代码的可读性(明确方法来源)。
  • 防止低级错误(如拼写错误或签名不匹配)。

在实际开发中,始终建议为每个重写方法添加 @Override 注解,这是一种良好的编程习惯。

总结

到此这篇关于java注解@Override用法的文章就介绍到这了,更多相关java注解@Override内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 关于Maven依赖冲突解决之exclusions

    关于Maven依赖冲突解决之exclusions

    这篇文章主要介绍了关于Maven依赖冲突解决之exclusions用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java的编译时错误和运行时错误问题

    Java的编译时错误和运行时错误问题

    这篇文章主要介绍了Java的编译时错误和运行时错误问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 解决maven父子工程install的时候排除某些子模块,让子模块不install问题

    解决maven父子工程install的时候排除某些子模块,让子模块不install问题

    在Maven父子工程中,如果希望某个子模块不被安装到本地仓库,可以在该子模块的`pom.xml`文件中添加以下配置: ```xml ... org.apache.maven.plugins maven-install-plugin 2.5.2 true
    2024-12-12
  • java实现单链表倒转的方法

    java实现单链表倒转的方法

    这篇文章主要为大家详细介绍了java实现单链表倒转的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Java之单例模式实现方案详解

    Java之单例模式实现方案详解

    这篇文章主要介绍了Java之单例模式实现方案详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java字符串驼峰与下换线格式转换如何实现

    Java字符串驼峰与下换线格式转换如何实现

    这篇文章主要介绍了Java字符串驼峰与下换线格式转换如何实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java函数式编程(一):你好,Lambda表达式

    Java函数式编程(一):你好,Lambda表达式

    这篇文章主要介绍了Java函数式编程(一):你好,Lambda表达式,本文讲解了新老函数式编程的一些变化,需要的朋友可以参考下
    2014-09-09
  • Java中的ReentrantLock原理解析

    Java中的ReentrantLock原理解析

    这篇文章主要介绍了Java中的ReentrantLock原理解析,ReentrantLock是Java中的一个线程同步工具,它提供了比synchronized更灵活和强大的功能。它是一个可重入的互斥锁,意味着同一个线程可以多次获取该锁,而不会发生死锁,需要的朋友可以参考下
    2023-11-11
  • JAVA设计模式之访问者模式原理与用法详解

    JAVA设计模式之访问者模式原理与用法详解

    这篇文章主要介绍了JAVA设计模式之访问者模式,简单说明了访问者模式的原理,并结合实例分析了java访问者模式的定义与用法,需要的朋友可以参考下
    2017-08-08
  • Flink开发IDEA环境搭建与测试的方法

    Flink开发IDEA环境搭建与测试的方法

    这篇文章主要介绍了Flink开发IDEA环境搭建与测试的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论