【发布时间】:2015-11-16 13:17:24
【问题描述】:
我有如下界面:
public interface MessageFactory<T extends Message> {
public T create(Session session);
}
当我这样定义类时,Eclipse 在该行下面的注释中给出了错误:
public abstract class MessageType<T extends Message> implements MessageFactory<T>{
public static final MessageType<ObjectMessage> PLAYER_REGISTER = new MessageType<ObjectMessage>() {
@Override
public ObjectMessage create(Session session) { //Error, remove @Override annotation
//impl
}
};
private MessageType(){ }
}
但是如果我将接口中的create方法作为抽象方法复制并粘贴到类中,错误就会消失:
public abstract class MessageType<T extends Message> implements MessageFactory<T>{
public static final MessageType<ObjectMessage> PLAYER_REGISTER = new MessageType<ObjectMessage>() {
@Override
public ObjectMessage create(Session session) { //Fine
//impl
}
};
public abstract T create(Session session);
private MessageType(){ }
}
匿名类实现接口有什么问题?
【问题讨论】:
-
@T.J.Crowder 但在第一个 sn-p
abstract class MessageType无论如何都应该从实现的接口继承T create(Session session)方法,不是吗? -
@T.J.Crowder 不清楚。匿名类扩展了 MessageType
,后者又实现了接口。因此匿名类实现了接口。 -
@T.J.Crowder 你没有实现接口,你是 MessageType 的子类 如果我们是实现接口的类型的子类,那么子类也将实现接口。所以我们只需要重写它的方法。我真的不明白我的例子中的问题。
-
@St.Antario:没错,您将
MessageType标记为抽象。我无法复制错误:ideone.com/hMBPMX 你确定这不是 IDE 错误吗? -
@T.J.Crowder 也许吧。我用 eclipse... 还是谢谢你。
标签: java eclipse interface anonymous-class