【发布时间】:2014-06-12 20:03:05
【问题描述】:
当我在 Java 中实现一个接口时,例如:
public interface IColumnHeader {
public String getHeaderValue();
public String findColumnValueFromHeaderValue(String parseFrom);
}
下面的枚举实现了上面的接口:
public enum FileColumnDwellTime implements IColumnHeader {
REPORTER_USER_ID {
@Override
public String getHeaderValue() {
return "reporter_user_id";
}
@Override
public String findColumnValueFromHeaderValue(String parseFrom) {
return parseFrom;
}
};
}
为什么在 Java 中实现接口并从接口实现方法会引入 @Override 注解。这不是用词不当吗?
该注释实际上不应该被称为“@Implementation”之类的东西吗?
@Override 注释将更适合实际上覆盖预定义超类方法的子类。在简单地从接口实现方法的情况下,不会进行实际的覆盖。
我说的对吗?
(如果我是 Java 9 的 JLS 编写者,我将有一个名为 @Implementation 的新注解,在从接口实现方法等的情况下,它将“子类化”@Override 注解。)
【问题讨论】:
-
嗯,
@Override是在JLS中定义的,所以现在改有点晚了..."实现在超类型中声明的方法,或者不覆盖 - 等效于 Object 的公共方法,则会发生编译时错误。”不过,不确定为什么只选择了一个注释。可能是为了简单? -
那是那个接口的合约。并覆盖作为编译时保护
-
如果它让您对命名更满意,那么在 Java 8 中,您实际上可以在接口中实现,然后您确实可以覆盖这些实现。当然,
@Override注释比 Java 8 早得多,但你去吧。 ;-) -
这个问题并不是真正特定于接口的。可以有抽象类方法和具体接口方法。
标签: java interface annotations overriding