2013-01-12 2 views
0

가능한 복제를 허용하는 이유 :
Why no static methods in Interfaces, but static fields and inner classes OK?구현은 인터페이스와

내가 왜 인터페이스 정적 블록을 허용하지 않는 것을 알고 싶어하지만, 정적 변수를 선언 할 수 있습니다. 일부 논리에서 정적 변수를 초기화하고 싶습니다.

편집 : 이전에는 더 나은 형식으로 내 쿼리를 게시하지 않았지만 샘플 코드가있는 내 쿼리입니다. 그것을 들여다보십시오.

interface A { 
    static class XYZ { 
     public static void methodA() { 
      // some implementation 
      System.out.println("methodA"); 
     } 

     public static void methodB() { 
      // some more implementation 
      System.out.println("methodB"); 
     } 
    } 

    void methodC(); 
} 

public class ABC implements A { 
    public static void main(String[] args) { 
     A.XYZ.methodA(); 
    } 

    @Override 
    public void methodC() { 
     // TODO Auto-generated method stub 

    } 
} 

인터페이스의 목적은 사용자/인터페이스의 구현들이 필요에 따라 속성 (방법)을 구현할 수있는 메커니즘을 제공하기 때문이다. 하지만 인터페이스의 구현을 인터페이스에 추가하는 것이 허용되는 경우 인터페이스의 해당 목적이 어떻게 상쇄되는지 명확히해야합니다. 인터페이스에서이 구현이 허용되는 이유를 분명히해야합니다. 그 이유는 무엇인지, 그 사실은 무엇입니까? 내가 알고 싶어요

+0

Java 8을 사용하면됩니다. –

+0

나는 왜 인터페이스가 정적 블록을 허용하지 않는지에 대한 대답이라고 생각하지만 정적 변수를 선언 할 수 있도록 허용한다. **는 @peterk에 의한 두 번째 이중화 된 질문에 주석으로 표시 될 수있다. 그것은 기술적이 아닌 이상적입니다. – andy

답변

2

그들은 구현을 허용하지 않는 인터페이스를 설계했습니다; 정적 블록은 구현을 구성하므로 허용되지 않습니다.

+1

예, 그들은 그렇게했습니다. 그들은 자바의 조상을 의미합니다. – Juvanis

+0

하지만 우리는 인터페이스에서 내부 클래스의 메서드에 임프 멘션을 제공 할 수 있습니다. –