스터디 발표를 준비를 위해 예제를 작성하던 중 다음과 같은 오류를 만났다.

must override a superclass method

오버라이드를 하기 위해서는 슈퍼클래스의 메소드가 필요하다?

예제 소스를 살펴보니 상속받아서 슈퍼클래스가 존재하는 메소드의 경우에는 @Override 어노테이션이 오류가 나지 않지만 인터페이스 기반에서는 오류가 난다.

구글링을 통해서 알아보니 다음과 같은 글을 발견했다.


Annotation은 Java code만으로 전달할 수 없는 부가적인 정보를 컴파일러나 개발툴로 전달할 수 있다. @Override annotationsuper classinterface의method를 override하고 있음을 명시한다. 하지만, 사소한 syntax 실수 등으로 orverride가 구현되지 않는경우가 있는데, 이는 runtime 레벨에서 오작동 등으로 드러나게 되므로 그 원인을 찾기가 쉽지 않다. 여기에@Override annotation을 사용하면 compile 레벨에서 상위 메소드를 정확히 구현하고 있는지를 체크할 수 있다.@Override annotation이 컴파일러에게 Override method임을 알려주기 때문이다.

하지만, @Override annotation을 사용했을 때, must override a superclass method라는 에러가 발생한다면, 컴파일러의 버전을 의심할 필요가 있다. J2Se 5.0, 그러니까 JDK 1.5는 @Overrider annotation을 지원하지만, super class에 대해서 지원할뿐, Interface에 대해서는 지원하지 않는다. Interface에 대한 지원은 JDK 1.6을 사용할 때 가능하다.


예제 소스는 1.5 기반이었다. -0-;;

Posted by Arawn Trackback 0 : Comment 1