본문 바로가기

Java

JDK5 에서의 @override Annotation.


프로젝트를 하기 위해 로컬 환경을 JDK6으로 잡아놓고 어느정도 개발을 진행하던 중

다시 환경이 바뀌어서 JDK5로.. -_-;

일단 , JDK만 바꿔주었더니 여기저기서 에러가 뜨기 시작했다.

이게 뭔일이여... 하고 봤더니 @override 여기서 죄다 문제가 생기고 있었다.

분명 1.5에서도 어노테이션은 지원을하고 있고

어떤 @override는 에러가 뜨지 않는데.. 유독 몇몇 클래스에서만 컴파일 에러를 발생시키고 있기 때문에

뭔가 하고 찾아보았다.

보니까..

@override를 어노테이션을 지원하기는 하는데

super class에 대해서만 지원을 한다.

즉 interface에서는 지원을 하지 않는다... 그래서 , interface를 구현하고 있는

하위클래스에서 저 어노테이션을 오버라이드해서 구현하고 있는 메소드에 사용하면

The method xxxxx() of type Classname must override a superclass method

이런 메시지가 발생하게 되는 것이다.

결국.. 저걸 다 지우던가...

아니면, JDK6으로 다시 갈아타던가... ㅠㅠ

..... 무슨 말인지 오해의 여지가 있다라고 하는 의견이 있으셔서 예를 덧붙입니다. ^^ ....

즉 ,
jdk6 에서는
public abstract Class A {
 public void method();
}

public class B extends A {

 @override
 public void method() {
 ...
}
}


public Interface A {
 public void method();
}

public class B implements A {

 @override
 public void method() {
 ...
}
}

가 둘 다 허용되지만

JDK5 에서는
public abstract Class A {
 public void method();
}

public class B extends A {

 @override
 public void method() {
 ...
}
}
만 해당됩니다.

public Interface A {
 public void method();
}

public class B implements A {

 @override
 public void method() {
 ...
}
}

일 경우 빨강 부분에서 컴파일 오류가 발생합니다.