[java] 자바 추상 ​​인터페이스

예를 들어보십시오 (Java로 컴파일)

public abstract interface Interface {
    public void interfacing();
    public abstract boolean interfacing(boolean really);
}

인터페이스를 “선언”해야하는 이유는 무엇입니까? 추상 인터페이스에 적용되는 다른 규칙이 있습니까?


마지막으로 : abstract더 이상 사용되지 않는 경우 왜 Java에 포함됩니까? 추상 인터페이스에 대한 이력이 있습니까?



답변

인터페이스를 “선언”해야하는 이유는 무엇입니까?

그렇지 않습니다.

public abstract interface Interface {
       \___.__/
           |
           '----> Neither this...

    public void interfacing();
    public abstract boolean interfacing(boolean really);
           \___.__/
               |
               '----> nor this, are necessary.
}

인터페이스와 해당 메소드는 내재적으로 abstract있으며 수정자를 추가해도 아무런 차이가 없습니다.

추상 인터페이스에 적용되는 다른 규칙이 있습니까?

아니요, 동일한 규칙이 적용됩니다. 이 방법은 (구체적인) 구현 클래스로 구현해야합니다.

초록이 더 이상 사용되지 않으면 왜 Java에 포함됩니까? 추상 인터페이스에 대한 이력이 있습니까?

흥미로운 질문입니다. 나는 JLS 의 첫 번째 판을 찾았고 심지어 “이 수정자는 더 이상 사용되지 않으며 새로운 Java 프로그램에서 사용되어서는 안된다” 고 말합니다 .

좋아, 더 파고 … 많은 깨진 링크를 친 후, 나는 원래의 오크 0.2 사양 (또는 “수동”) 의 사본을 찾을 수있었습니다 . 내가 말해야 할 매우 흥미로운 읽을 거리와 총 38 페이지! 🙂

섹션 5, 인터페이스에서 다음 예제를 제공합니다.

public interface Storing {
    void freezeDry(Stream s) = 0;
    void reconstitute(Stream s) = 0;
}

그리고 여백에

앞으로 인터페이스에서 메소드 선언의 “= 0″부분이 사라질 수 있습니다.

키워드 =0로 대체 되었다고 가정하면 인터페이스 메소드에 대해 필수 사항 abstract이라고 생각합니다 abstract.


관련 기사 : Java : 추상 인터페이스 및 추상 인터페이스 메소드


답변

public인터페이스 메소드 와 마찬가지로 필요하지 않으며 선택 사항 입니다.

이에 대한 JLS를 참조하십시오.

http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html

9.1.1.1 추상 인터페이스 모든 인터페이스는 암시 적으로 추상입니다. 이 수정자는 더 이상 사용되지 않으며 새 프로그램에서 사용해서는 안됩니다.

9.4 추상 메소드 선언

[…]

이전 버전의 Java 플랫폼과의 호환성을 위해 스타일에 따라 인터페이스에 선언 된 메소드에 대한 추상 수정자를 중복 지정하는 것이 허용되지만 권장되지 않습니다.

인터페이스 방법에 대해 공개 수정자를 중복 지정하는 것은 허용되지만 스타일 문제로 강력히 권장하지 않습니다.


답변

인터페이스 추상을 선언 할 필요는 없습니다.

모든 인터페이스를 공개 (인터페이스가 공개 인 경우) 또는 추상 (이미 인터페이스에있는) 메소드를 선언하는 것처럼 중복됩니다.

그러나 아무도 당신을 막을 수 없습니다.

명시 적으로 말할 수 있지만 다음과 같은 것은 아닙니다.

  • 생성자의 첫 번째 줄에서 super ()를 호출하십시오.
  • extends Object
  • 상속 된 인터페이스 구현

추상 인터페이스에 적용되는 다른 규칙이 있습니까?

인터페이스는 이미 “추상적”입니다. 해당 키워드를 다시 적용해도 아무런 차이가 없습니다.


답변

봄에는 학문적 의미가 없다는 점에 유의하십시오. 추상 인터페이스는 개발자에게이를 사용하지 말 것을 경고하는 것입니다 @Autowired. 나는 그 봄 / 일식을 바랍니다@Autowired 가이 속성을보고 그러한 사용법에 대해 경고 / 실패하기를 바랍니다.

실제 예 : @Transnational에서 @Repository로 @Service 프록시는 동일한 기본 메소드를 사용해야하지만로 인해이 추상 인터페이스를 확장하는 다른 인터페이스를 사용해야합니다 @Autowired. (이 XXXSpec 인터페이스라고 부릅니다)


답변

모든 인터페이스는 암시 적으로 추상적입니다.
이 수정자는 더 이상 사용되지 않으며 새 프로그램에서 사용해서는 안됩니다.

[Java 언어 사양-9.1.1.1 abstract인터페이스]

또한 인터페이스 멤버 메소드는 암시 적 public abstract입니다.
[Java 언어 사양-9.2 인터페이스 멤버]

왜 이러한 수정자가 암시 적입니까? 여기에 유용한 다른 수정 자 ( ‘ no modifier’- modifier도 없음)가 없으므로 명시 적으로 입력 할 필요가 없습니다.


답변

필요하지 않습니다. 언어의 특징입니다.


답변

인터페이스의 모든 메소드가 추상적이므로 인터페이스는 기본적으로 추상적이므로 필요하지 않습니다.