2011-04-08 5 views
4

Java 중첩 인터페이스를 정적이 아닌 이유는 무엇입니까? 그리고 왜 내부 클래스가 정적이 아닌 최종 멤버를 포함 할 수 없습니까?Java 중첩 인터페이스 및 내부 클래스

고슬링을 지나는 중에 질문을 보았지만 아직 답변을 찾을 수 없었습니다.

+7

고슬링을 봤습니까? 그 생각하지 않았 니? –

+1

@Joachim Sauer http://instantrimshot.com/ –

답변

8

중첩 된 클래스가 정적이 아닌 (즉, 내부 클래스) 경우 이는 해당 인스턴스가 외부 클래스의 인스턴스에 바인딩된다는 것을 의미합니다. 인터페이스에는 자체 인스턴스가 없기 때문에 구현 클래스가 외부 객체에 바인딩되는 것이 유용하지 않은 것처럼 보입니다. 따라서 기본적으로 정적으로 설정하는 것이 합리적입니다.

+0

"내부 클래스는 명시 적 또는 암시 적으로 정적으로 선언되지 않은 중첩 클래스입니다. [...] 멤버 인터페이스 (§8.5)는 항상 암시 적으로 정적이므로 고려되지 않습니다 내부 수업이 될 수 있습니다. " http://java.sun.com/docs/books/jls/third_edition/html/classes.html에서 인용하십시오. –

+1

내부 클래스 인터페이스와 같은 것은 존재하지 않습니다. –

+2

@Zoltan : 질문은 ** 이유 **입니다. 그런 건 없어? –

2

내부 클래스에 정적 인 최종 멤버를 가질 수없는 이유는 확실하지 않지만 정적 멤버는 특정 개체 인스턴스에 바인딩되지 않으므로 내부 클래스 또는 외부 클래스에 차이가 발생하지 않습니다.

예.

class OuterClass { 

    private static int staticMember; 

    class InnerClass { 

    void incStatic() { 
     staticMember++; 
    } 

    } 

} 

정적 멤버는 내부 클래스에있는 것처럼 내부 클래스에서 액세스 할 수 있습니다.

관련 문제