2011-01-12 3 views
15

두 개의 다른 패키지에 두 개의 클래스가 있습니다. 한 클래스의 경우 액세스 한정자를 설정하지 않고 생성자를 정의했습니다. 이 클래스의 객체를 다른 패키지에서 인스턴스화하고 'the constructor xxx() is not visible'오류가 발생합니다.Java 생성자는 기본적으로 public이 아닙니까?

public으로 수정 된 액세스 권한을 정의하면 문제가 없습니다. 나는 생성자가 기본적으로 공개 된 줄 알았습니까?

+0

클래스 생성자는 기본적으로 package-private입니다. 열거 형 생성자는 기본적으로 비공개입니다. – Boann

답변

18

없는 액세스 지정! = 공공

없음 수정 패키지 비공개입니다. 확인 doc

+0

대답은 정상이지만 링크 된 문서에는 기본 c'tors에 대한 언급이 없습니다. –

+1

@Bob 수정 자 _가 보이지 않습니까? –

+0

하지만 인터페이스에서 모든 메서드는 public abstract이거나 public으로 설정 한 경우에도 마찬가지입니다. –

13

아니요, 그렇지 않습니다. 기본적으로 패키지 가시성이 있습니다.

2

액세스 한정자를 쓰지 않으면 기본값으로 설정됩니다. 이는 개인 패키지를 의미합니다. 예 : 패키지 외부의 클래스는 액세스 할 수 없습니다.

1

아니요. 기본 액세스 지정자가 있습니다. 즉 패키지 공개 상태입니다.

1

생성자의 선언에서 액세스 한정자를 사용하여 생성자를 호출 할 수있는 다른 클래스를 제어 할 수 있습니다. 생성자를 public으로 명시 적으로 선언하지 않으면 선언 된 동일한 패키지 (패키지 액세스)에서만 볼 수 있습니다.

7

기본적으로 액세스는 (실수 ...) 기본 액세스입니다. 전용 패키지으로 알려져 있습니다. 고려하십시오 : 그들이 디폴트로 public 인 경우, 생성자가 public이 아니지만 실제로 private 패키지 였음을 어떻게 나타낼 수 있습니까? 이를 표시 할 개인 패키지에 해당하는 키워드가 없습니다.

1

클래스에서 액세스 한정자가없는 모든 메소드에는 패키지 가시성이 있습니다. 그러나 인터페이스 메소드에는 항상 공개 된 가시성이 있습니다.

관련 문제