我一定是个白痴,但我不知道我的错误在这里。
final class EmptyBench extends MicroBench {
long doIterations(long numIterations) throws InterruptedException {
return numIterations;
}
}
这扩展了包含此声明的类MicroBench:
abstract long doIterations(long numIterations) throws InterruptedException;
我收到此错误:
EmptyBench.java:6: error: EmptyBench is not abstract and does not override abstract method doIterations(long) in MicroBench
看不到任何泛型,返回类型没有变化,throws子句没有变化。有人能告诉我我在这里失踪了吗?
答案 0 :(得分:2)
查看签名,并始终使用@Override
- 您的IDE甚至可以帮助自动完成。您确定要扩展正确的MicroBench;也许你有不同包装的几个版本?
@Override
public long doIterations(long numIterations) throws InterruptedException {
BTW大多数IDE允许您生成用于覆盖方法的代码,可能是在边距中的错误图标/实现所有抽象方法。
答案 1 :(得分:2)
使用这些类,我可以重现这个问题:
package a;
public abstract class A {
abstract void method();
}
和
package b;
import a.A;
public final class B extends A {
void method() {}
}
但是,我的IDE(Eclipse)给了我一个不同的错误消息,所以YMMV:
此类必须实现继承的抽象方法A.method(),但不能覆盖它,因为它在B中不可见。要么使类型为abstract,要么使继承的方法可见
我没有任何要添加到此错误消息的内容,但是,如果您不控制MicroBench
类,则表示运气不佳。
作为旁注,如果B
是抽象的而不是最终的,那么您可以创建一个类a.C extends b.B
,而这个类又可以实现a.A.method()
答案 2 :(得分:0)
还有另一个原因可能导致这种情况发生。 Java并不总是喜欢将类扩展到包之外。在eclipse中,如果您具有包含MicroBench的程序包1和包含EmptyBench的程序包2,由于程序包权限,您将无法扩展该MicroBench类。