与Java中的@Override相反的标记

时间:2014-04-21 13:29:49

标签: java methods override superclass annotate

我知道在Java中标记为@Override来注释方法,该方法会覆盖超类中的方法,如果没有,则会出现警告。 我的问题:是否有一个与annotate方法相反的标签,我们不想覆盖超类的方法(例如偶然)?

我知道我可以在超类final中设置方法,但是这个解决方案涉及超类代码的更改。那是我不想做的 - 只是想改变我的代码:)

我知道我可以为这个方法设置另一个名字,但有时在超类中有很多方法而你根本就没有意识到它们。因此,当您在子类中实现自己的时,可能会偶然使用相同的名称。怎么避免这个?

3 个答案:

答案 0 :(得分:5)

不,没有预定义的 Java注释,它与@Override相反。

话虽如此,大多数IDE都应该能够识别某个方法是否覆盖了另一个方法。例如,Eclipse具有此功能。如果在“大纲”视图中查看您的类,您将看到一个出现覆盖的小三角形。例如:

enter image description here

我必须相信NetBeans和IntelliJ Idea必须具有类似的功能。


顺便说一下,你试图解决的这个问题,即避免无意中覆盖父方法,是一个严重且有害的问题,在扩展具有多种方法或大的类时具有特别高的风险继承层次结构(以Swing组件为例 - 由于我因意外覆盖JPanel的getX()getY()方法而绊倒,我曾经遇到过一个令人沮丧的GUI错误。如果组合在这种情况下有意义的话,这通常更喜欢构图而不是继承。

答案 1 :(得分:1)

我已经在NetBeans中收到此警告,即使我实际上并未覆盖该方法。我只是从子类构造函数中调用子类方法,NetBeans将此标记为覆盖。

即使没有逆@override标记,一个简单的解决方案就是让方法变为私有而不是公共/受保护,如果你知道你不会覆盖它或在子类下面的任何地方使用它&# 39; s in。

答案 2 :(得分:0)

为子类中的方法指定一个与您希望不覆盖的超类中的方法不同的名称或签名。