在Eclipse中,为什么缺少子类上显示的接口方法,而不是父类?
假设我有一个简单的界面:
public interface ISpeaks {
String talk();
}
然后,我在扩展的类上实现了这个接口:
public abstract class Cat implements ISpeaks {
// forgot to implement talk()
}
public class Tiger extends Cat {
// also didn't implement talk()
}
Eclipse抱怨 Tiger缺少方法talk()(确切错误:The type Tiger must implement the inherited abstract method ISpeaks.talk()
)。我希望它告诉我 Cat 缺少talk(),因为Cat是显式实现接口的类。不是老虎。
这绝对是一个“呃?”对我来说,因为我在Spring / Hibernate中,每当我向DAO接口添加一个方法时,每次数据库感知的测试用例都会出现这样的错误,这是一个方法丢失 - 而不是一个错误嘲笑我的DAO的基本测试方法。
答案 0 :(得分:9)
因为Cat
类是抽象的,所以您不必实现所有接口方法。
您只需要在实现ISpeaks
的具体类上实现所有接口方法,例如Tiger
。
这是合乎逻辑的,因为无法实例化Cat
类型的对象,因此无法创建不完全实现接口的对象。
http://download.oracle.com/javase/tutorial/java/IandI/abstract.html
的最后一段给出了一个类似的例子