예를 들어보십시오 (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도 없음)가 없으므로 명시 적으로 입력 할 필요가 없습니다.
답변
필요하지 않습니다. 언어의 특징입니다.
답변
인터페이스의 모든 메소드가 추상적이므로 인터페이스는 기본적으로 추상적이므로 필요하지 않습니다.