Java에서 메소드의 기본 범위는 무엇입니까?


165

내가 입력하면 :

 void doThis(){
     System.out.println("Hello Stackoverflow.");
 }

기본 범위는 doThis()무엇입니까?

공공의? 보호? 은밀한?

답변:


264

기본 범위는 package-private입니다. 동일한 패키지의 모든 클래스는 메소드 / 필드 / 클래스에 액세스 할 수 있습니다. 패키지-개인은 보호 및 공개 범위보다 엄격하지만 개인 범위보다 더 허용됩니다.

추가 정보 :
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html


2
"패키지 기본값은 ...보다 엄격합니다."
reinaldoluckman

7
"package-private"은 외부 단위 테스트를위한 방법을 노출 할 때 사용하기에 좋은 범위라고 언급 할 가치가 있습니다.
게리 로우

1
이 경우 라이브러리를 만들거나 사용자가 코드 기능을 사용할 수있는 것을 만들지 않는 한 무언가를 공개해야하는 이유는 무엇입니까?
Daniel

2
@ user3858162 대부분의 사소한 응용 프로그램은 여러 패키지로 구성되며,이 경우 다른 패키지에서 호출 메서드를 호출하는 데 공용 범위가 필요합니다.
Esko Luontola

19

패키지 private으로 정의 된 것은 클래스 자체, 동일한 패키지 내의 다른 클래스에 의해 액세스 될 수 있지만 서브 클래스가 아닌 패키지 외부에서는 액세스 할 수 없습니다.

편리한 액세스 수준 수정 자 표는 이 페이지 를 참조하십시오 .


9

액세스 수정자가 없으면 선언 된 패키지 전체에서 클래스 멤버에 액세스 할 수 있습니다. Java 언어 사양 §6.6 에서 자세한 내용을 확인할 수 있습니다 .

인터페이스의 멤버는 명시 적으로 선언되었는지 여부에 관계없이 항상 공개적으로 액세스 할 수 있습니다.


5

기본 범위는 "default"입니다. 이상 합니다. 자세한 내용은 참조 를 참조하십시오.


3
실제로는 그렇지 않습니다 : 패키지 전용
Maurice Perry

2
수락 된 답변을 삭제할 수 없습니다. Joe가 @Esko의 답변과 함께 가도록 권장합니다!
Michael Haren

1
두 번째 링크가 끊어졌습니다 (그리고 두 링크임을 놓치기 쉽습니다)
idclev 463035818

1

Java 8에서는 이제 기본 범위를 사용 하여 인터페이스 자체 내에서 메소드를 구현할 수 있습니다 (정적 전용).


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.