2012-09-17 2 views
2

dead을 가져 오게되어 죄송합니다. 그러나 나는 아직도 명세서의이 부분이 무엇을 의미하는지 명확히 이해하지 못한다. 인터페이스는 직접 슈퍼가 없으면암시 적 수퍼 인터페이스를 이해하려고 시도

후 인터페이스 내재적 특성 의 리턴 형 R은 공용 추상 멤버 메소드 m 선언 및 서명의 각 공개 인스턴스 메소드 m에 대응하는 절 t를 슬로우 , 반환 유형 r 및 throws 절 t 이 같은 서명, 동일한 반환 형식 및 호환 가능한 throws 절이있는 메서드가 인터페이스 인 에 의해 명시 적으로 선언되어 있지 않으면 Object에 선언됩니다. 인터페이스에서 명시 적으로 이 m에서 Object에 final로 선언 된 경우 m을 선언하면 컴파일 타임 오류가 발생합니다.

interface Testing 
{ 
    void test(); 
} 
public class Test{ 
    public static void main(String[] args) { 
     Testing t = new Testing(){ 
      @Override 
      public void test(){ 
      } 
     }; 
     t.test(); 
     t.toString(); 
    } 
} 

지금 사양 상태로 위 또한

interface Testing 
    { 
     void test(); 
     String toString(); 
     //other non-final methods of Object 
    } 
    public class Test{ 
     public static void main(String[] args) { 
      Testing t = new Testing(){ 
       @Override 
       public void test(){ 
       } 
      }; 
      t.test(); 
      t.toString(); 
     } 
    } 

로 변경됩니다 감안할. 인터페이스 계층 구조가 있는지 확인한 다음 모두가 이러한 추상 메소드를 얻습니다.

+1

무엇이 정확하게 당신의 질문입니까? 모든 클래스는 구현 된 인터페이스에 관계없이 Object의 메서드를 상속받습니다. – Hachi

+0

내 질문은 - "내 이해가 맞습니까?" 또한 "이것의 필요성은 무엇입니까?" – John

+0

예, 이해가 정확합니다. 명시 적 또는 암시 적으로 인터페이스에 메서드가있는 한.그것들을 사용하는 다른 클래스 나 인터페이스에는 아무런 문제가 없다. – sasidhar

답변

0

인터페이스에 슈퍼 인터페이스가 없으면 Object 클래스 메소드의 암시 적 선언을 가져옵니다. 이러한 메소드가 인터페이스에 포함되어있는 한. 이 인터페이스를 확장하거나 구현하는 모든 인터페이스는이 인터페이스에 의해 명시 적으로 선언 된 메소드와 암시 적으로 가져온 메소드 사이에 큰 차이점을 보지 못합니다. 인터페이스가 명시 적으로 명시 적으로 좋은 점을 지적합니다.

1

모든 클래스가 Object를 확장한다는 것은 클래스 상속 계층의 일부 지점에서 Object를 확장한다는 것입니다. 그러나 인터페이스는 Object를 확장하지 않습니다. 이는 여러 가지 내구성으로 인한 문제를 피하기위한 것입니다.

인터페이스가 Object으로 확장되지 않으므로 우리가 액세스 한 객체의 유형 (클래스가 아닌)이 인터페이스 인 경우 toString과 같은 메소드를 사용할 수 없음을 의미합니다. 그러나 어떤 클래스의 모든 클래스는 Object에서 확장되므로 이러한 메서드를 사용할 수 있어야합니다. 따라서이 문제를 해결하기 위해 Object의 모든 최종 인터페이스는 수퍼 인터페이스가없는 모든 인터페이스에서 암시 적으로 선언됩니다. 모든 클래스는 어느 시점에서 Object에서 연장되어야하므로 이러한 메소드의 이러한 계약은 항상 만족됩니다.

TL; DR은 - 그것은 인터페이스 (. 예를 들어 Serializable)

편집 우리가 유형의 변수에 저장 어떤 클래스의 인스턴스가있을 때 우리가 Object에 의해 제공 방법에 액세스 할 수 있는지 확인하기 위해 트릭 : 귀하의 질문에 대답하기 위해, 당신은 약간 벗어났다. Object의 모든 비 최종 메소드가 해당 인터페이스에 상위 인터페이스가없고 각 메소드 추가시 인터페이스에 명시 적으로 선언 된 메소드가없는 경우 (사용 여부와 관계없이) 인터페이스에 추가됩니다.

+0

나는 OP의 질문이'인터페이스의 계층 구조가 있는지 확인한 다음 모두가이 추상 메소드를 얻는다 '라고 생각했다. 내가 뭐 놓친 거 없니? – sasidhar

+0

@asididar : 내 두 번째 질문 이잖아. – John