2011-03-24 5 views
38

인터페이스의 모든 메소드는 기본적으로 공개 된 공개 모드입니까?인터페이스의 메소드 가시성

+0

시간이 있다면, 첫 번째 팀의 머리로 SCJP for Java 6 prep 가이드를 읽는 것이 좋습니다. 거기에 많은 정보. 인터페이스 메소드는 기본적으로 추상 및 공개입니다. – zawhtut

답변

69

인터페이스의 모든 메소드의 기본값은 public입니다.

는 인터페이스의 모든 구성원은 암시 public입니다

을 명시 Java Language Specification 6.6.1 참조하십시오.

+23

그들은'public' 디폴트 **와'public'만이 유일하게 허용 된 값입니다. –

+0

JLS를 참조하기위한 +1 (일반적으로 인용문이 있음) –

+4

하지만 ** rodion * (*** 로컬/개인 인터페이스 *** 자체)의 ** 답변/"해결 방법"**이 중요합니다. http://stackoverflow.com/a/5420362/1915920 –

3

예, 인터페이스의 모든 방법을 공개하고, 다른 액세스 한정자를 가질 수 없습니다

3

예, 인터페이스의 모든 메소드 (즉, 기본 공용 액세스 한정자는 유일하게 유효한 액세스 한정자입니다) 암시 적으로 공개적이고 추상적입니다.

확인 9.4

14

모든 인터페이스 방법 public abstract 내용입니다 Java language specification 장에서는, 모든 인터페이스 필드는

here보기 ... public static final 있습니다.

+4

+1 : 그리고 모든 중첩 클래스는'public static'입니다. –

+0

인터페이스에는 상태 (인스턴스 변수)가없는 것이 가장 좋습니다. 전지. 인터페이스는 기능 또는 객체가 수행 할 수있는 것을 정의해야합니다. – hotshot309

10

여기에 다른 대답을 추가하십시오. 모든 메소드는 public이지만, 인터페이스 자체가 패키지 로컬 인 경우 모든 메소드도 package-local입니다.

따라서 패키지 로컬 인터페이스를 공용으로 확장하여 공용 및 패키지 로컬 메서드를 혼합 할 수 있습니다.

public interface P{ 
    void iAmPublic(); 
} 

interface L extends P{ 
    void iAmPackageLocal(); 
} 

여기 L 효과적 일 개 공개 한 패키지 로컬 방법이있다. 패키지 외부의 클라이언트는 iAmPublic() 만 볼 수 있지만 패키지 안의 클라이언트는 두 가지 방법을 모두 볼 수 있습니다.

동일한 방법으로 다른 클래스 내부의 인터페이스를 중첩하여보다 가벼운 메소드 가시성을 확보 할 수 있습니다.

+1

당신의 메소드'iAmPackageLocal'은 package-private이 될 수 없습니다. http://stackoverflow.com/a/4801672/16209를 참조하십시오. –

+2

첫 번째 문장에서 설명했듯이 메서드는 선언없이 선언 할 수 없으므로 메서드가 효율적으로 * package-private입니다. 인터페이스는 동일한 게시물에 명시된대로 패키지 전용이 될 수 있습니다. 패키지 외부에서'P # iAmPublic()'에만 접근 할 수 있지만 패키지 안의 두 메소드 모두에 접근 할 수 있기 때문에 원하는 효과를 얻을 수 있습니다. 패키지 내에'public L getL();'메소드를 가진 API를 가지고 있고 패키지 외부에서'getL(). iAmPackageLocal()'을 호출하면 컴파일러 에러가 발생합니다. – rodion

+0

'public class PseudoPrivate는 L –