2014-09-01 2 views
0

저는 바보가되어야합니다.하지만 저는 여기에 내 오류가 무엇인지 알지 못합니다.하지만 그 추상적 인 메서드를 무시했습니다.

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

a.A.method() 정말 이상한 보이는 구현할 수있을 것이다 클래스 a.C extends b.B를 만들 수 있습니다. 당신은 올바른 클래스를 가리키고 있고 그것은 실제로 동일한 서명 (그리고 동일한 서명에 의해 동일한 문자가 사용되는 것을 의미합니다)을 가리키고 있습니까? –

+6

보고있는 코드를 컴파일하고 있지 않습니다. –

+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 그래서 :

This class must implement the inherited abstract method A.method(), but cannot override it since it is not visible from B. Either make the type abstract or make the inherited method visible

MicroBench c를 제어하지 않으면이 오류 메시지에 추가 할 내용이 없습니다. 아가씨. 너 운이 없어. 보조 노트로

, B 대신 최종의 추상적 인 경우, 다음 차례로

+1

WOW. 너 락. 대단히 감사합니다. – Doradus

+0

문제를 해결 한 방법/방법을 알려주십시오. 클래스를 같은 패키지로 옮기거나 메서드를 public으로 만들거나 다른 것을 만들었습니까? –

+0

나는 추상 메소드를 보호했다. – Doradus

2

서명을보고 항상 @Override을 사용하십시오. IDE가 자동 완성 기능을 지원할 수도 있습니다. 올바른 MicroBench를 확장하고 있습니까? 다른 패키지에 여러 버전이있을 수 있습니까?

@Override 
public long doIterations(long numIterations) throws InterruptedException { 

은 BTW 대부분의 IDE는, 메소드를 오버라이드 (override)하기위한 코드를 생성 어쩌면 여백에 오류 아이콘에/모든 추상 메소드를 구현할 수 있습니다. 이러한 클래스를 사용

+0

'@ Override'는 컴파일러가 메소드가 실제로 오버라이드하고 있는지 확인하지만, 오버라이드하지 않을 메소드를 오버라이드 (override)하지는 않습니다. –

+0

@SillyFreak 네,하지만'actionPerformed (ActionEvent)'('é')와 같은 서명의 오류를 발견하고 자동 완성에 도움이됩니다. –

관련 문제