Java

인터페이스 상속에 따른 오버라이딩 규칙

bang2001 2013. 7. 25. 17:12

인터페이스의 상속에 따른 인터페이스의 메소드를 오버라이딩 하는 규칙에 대해서는


일반 클래스를 상속받아서 메소드를 오버라이딩 하는것과는 약간 틀리다.

여기서 틀리다고 말하는 것은 규칙이 한가지가 틀리다고 말한 것이다.

먼저 일반적인 오버라이딩 규칙은 다음과 같다.

-------------------------------------------------------------------------------------------

1. 접근지정자는 부모객체의 메소드보다 같거나 혹은 접근범위가 더 큰 접근지정자를 
   사용해야 한다.

2. 반환타입은 같아야 한다.

3. 메소드명은 같아야 한다.

4. 매개변수는 같아야 한다.

-------------------------------------------------------------------------------------------

하지만 인터페이스를 상속받을때 1번의 규칙이 틀리다.

인터페이스는 다음과 같다.

1. 접근지정자는 public으로 지정해야 한다.

        .
        .
        .
  (나머지 규칙은 같다.)

다음 예제를 통해서 위의 규칙이 사실인지 테스트 해보면 알 것이다.

------------------------------------------------------------------------------------------

interface DeclareStuff 
{
        void doStuff(int s); 
}

public class TestDeclare implements DeclareStuff 
{
public static void main(String [] args) 
{
}

        @Override
protected void doStuff(int s) // default(생략형)보다 protected가 접근범위가 더 넓습니다.
{
}
}

-------------------------------------------------------------------------------------------

직접 돌려보면 알겠지만 위의 코드는 컴파일 에러가 난다. 에러메시지의 내용으로 간단히 설명하면

"부모객체의 메소드를 구현 할 수 없습니다. 약한(낮은) 엑세스 권한을 부여하려고 시도하였습니다."

라는 뜻으로 말 그대로 작은 범위의 접근지정자를 사용했다는 메시지가 뜨게 된다.

public 보다 한단계 하위인 protected 접근지정자를 써도 마찬가지 이다. 이점 잘 참고하도록 하자.