实现接口方法的方法应该用@Override进行注释吗?

Override注释的javadoc说:

指示方法声明要重写超类中的方法声明。如果使用此注释类型注释了方法,但没有重写超类方法,则需要编译器生成错误消息。

我不认为接口在技术上是超类。真的是这样吗?

问题阐述


当前回答

包含@Override的问题是,它会让您认为您忘记调用super.theOverridenMethod()方法,这非常令人困惑。这应该是非常清楚的。也许Java应该提供一个@Interface在这里使用。哦,好吧,还有一个半途而废的Java特性……

其他回答

我会利用一切机会。你什么时候使用Java的@Override注释,为什么?

你应该尽可能使用@Override。它可以防止犯简单的错误。例子:

class C {
    @Override
    public boolean equals(SomeClass obj){
        // code ...
    }
}

这不能编译,因为它没有正确地覆盖公共布尔值= (Object obj)。

对于实现接口(仅限1.6及以上版本)或重写超类方法的方法也是如此。

JDK 5.0不允许你在实现interface中声明的方法时使用@Override注释(它的编译错误),但JDK 6.0允许。所以你可以根据自己的需求来设置你的项目偏好。

包含@Override的问题是,它会让您认为您忘记调用super.theOverridenMethod()方法,这非常令人困惑。这应该是非常清楚的。也许Java应该提供一个@Interface在这里使用。哦,好吧,还有一个半途而废的Java特性……

如果一个具体类没有覆盖一个抽象方法,使用@Override来实现是一个开放的问题,因为编译器总是会警告你任何未实现的方法。在这些情况下,可以提出这样的论点,即它降低了可读性——在代码中需要阅读的内容更多,而且在较小的程度上,它被称为@Override而不是@ implementation。