Java:The method xxx of type xxx must override or implement a supertype method _对@Override注解作用的思考

问题描述

@Override报错

The method xxx of type xxx must override or implement a supertype method

相关知识

@Override

Override注解的api文档说明:

Indicates that a method declaration is intended to override a method declaration in a supertype. If a method is annotated with this annotation type compilers are required to generate an error message unless at least one of the following conditions hold:

  • The method does override or implement a method declared in a supertype.
  • The method has a signature that is override-equivalent to that of any public method declared in Object.

翻译成中文:

  • 表示方法声明旨在覆盖超类型中的方法声明。 如果使用此注释类型注释方法,则除非至少满足以下条件之一,否则需要编译器生成错误消息:
    • 该方法将覆盖或实现在超类型中声明的方法。
    • 该方法具有与Object中声明的任何公共方法的覆盖相同的签名

也就是说,一个方法必须重写了父类的方法才能添加@Override注解

出现问题原因

那么显然,是因为没有重写父类的方法所以报错的,如果去掉@Override,那这种问题导致的报错就消失了,但是我们不能逃避问题,编译器报出了这个错误,是在提示你没有成功重写父类的方法,如果执意去除报错的@Override注解,那么运行的方法是子类的新方法,而不是期望的被重写的父类中就有的方法。

解决

按照此思路检查是否有方法名拼错等问题,我这问题排查了好久,弄了半天发现是Eclipse不知道什么时候给我import了个不存在的东西,导致被重写的形参中的数据类型不能指向源码,而是import指向的不存在的地方,所以@Override报错这个方法不是重写。

将那行自动添加上的import语句注视掉,就不报错了,并且能按预期执行被重写的父类方法。

思考

通过这次排错,可以发现@Override注解是非常有用的,它可以让编译器帮忙检查重写有没有出错,如果不小心没有重写,而是写了个子类的新方法,那么@Override注解会报错。所以,@Override注解的报错是提示,让你不要出错,出错的是方法重写问题,而不是@Override注解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值