【发布时间】:2011-08-26 09:01:30
【问题描述】:
更新:过去,这只是 maven 的编译级别问题。
问题涉及@Override 注释和超级接口。
这很简单,因为它真正的问题是@Override 注释的范围不限于上层接口...
这里有一些简单的代码来理解这个问题:
public abstract interface CrudDao<T>
{
void update(T bean);
T get(Object... pk);
void delete(Object ...pk);
T create(T bean);
}
public interface BeanDao extends CrudDao<Bean>
{
Bean moreSpecificGetMethod();
void moreSpecificUpdateMethod();
}
public class BeanDaoImpl implements BeanDao {
@Override
public void update(Bean bean){}
@Override
public Bean get(Object... pk){}
//... Rest of the methods
}
编译器说方法应该在 BeanDao 接口中创建。为什么不从超级接口解析方法?
【问题讨论】:
-
您确定是
public interface BeanDaoImpl而不是public class BeanDaoImpl? -
对不起,当然不是公共接口BeanDaoImpl而是公共类BeanDaoImpl,更正一下。
-
我正在使用最新的 1.6 JDK,并在 eclipse 中使用默认合规设置。
-
现在
BeanDaoImpl是一个非抽象类,你不能有没有主体的方法......而且方法必须是public是故意“简化”问题吗?跨度> -
如果您将 BeanDaoImpl 设为抽象并将方法设为公共,则相同的代码不会给出任何编译错误......它工作正常。