2012-06-23 7 views
2

다른 접근 수정자를 가진 클래스의 패키지로 프로젝트를 만들고 다른 접근 수정자를 가진 클래스의 모든 특성을보기 위해 노력 중입니다. 공용 클래스를 가진 패키지를 가지고 있는데, 기본 클래스를 가진 패키지를 가지고 있고, 보호 된 클래스와 프라이빗 클래스를 위해 2 개의 다른 클래스를 만들려고 시도했지만, 클래스 privatez에 대한 불법적 인 수정 자라고 public에만 abstract 인 & final이 허용되었습니다. 왜 그런가? 그리고 두 번째로, 각 클래스에 대해 그것을 이해하는 좋은 방법을 테스트하고 있습니다. 이전 게시물보다 더 나은 질문을하려고합니다. 또한 각 액세스 한정자의 응용 프로그램을 배우고 싶습니다.연습 수정 자

+0

가능한 중복 (http://stackoverflow.com/questions/11165566/practice-access-modifiers) 나는 더 나은 질문에 그것을 만들어 –

+1

@AnthonyPegram 실제로 설명 내가 궁금해하고있었습니다. 그것은 반복이 아닙니다. –

답변

5

나는, 공공 클래스와 기본 클래스를 패키지를 가지고 노력하고 보호 및 개인 클래스에 대한 다른 2를 시도했지만 그것은 "고 말했다 클래스 privatez에 대한 불법 수정, 공공의, 추상적 인 & 마지막을 "허용됩니다. 왜 그런가?

간단한 대답은 최상위 클래스를 private으로 선언 할 수 없다는 간단한 대답입니다.

그 이유는 자체적으로 볼 수있는 클래스를 갖는 것이 바람직하지 않기 때문입니다. 다른 클래스가 그것을 사용할 수있는 방법은 없습니다 (반사와 함께 더러운 트릭을 사용하는 것보다 가설 적으로는 별개입니다). 그래서 JLS는 단지 말하고 있습니다 : "그것은 이해가 가지 않는데, 나는 그것을 허용하지 않고있다."

(지금은 중첩 클래스 액세스 private을 가질 수 있습니다 ...하지만 private은 가장 바깥 쪽 바깥 쪽 클래스의 모든 클래스에 private을 의미하기 때문이다 ...)

를 그리고 둘째로, 테스트입니다 각 반마다 그것을 이해하는 좋은 방법이 될 것입니다.

텍스트 북/자습서를 읽고 이해하는 것이 좋습니다. 문제는 자신의 예제를 작성하여 배우려고하면 쉽게 잘못된 결론을 내릴 수 있다는 것입니다. 이 예를 들어


:

package privatez; protected class privatez { } 

가설 protected 클래스는/오직 그 서브 클래스를 볼 수 있습니다 것입니다. 그러나 클래스는 이고 항상 하위 클래스에 표시되는이므로 이해가되지 않습니다. (게다가, 서브 클래스를 방지 할 수있는 방법은 클래스 final을 선언하는 것입니다, 당신은 "개인 패키지"를 사용하여 하위 클래스를 제한 할 수 있습니다, 접근 수정자를 즉 없습니다.)

protected 액세스 한정자는 돌며 물건 에 대한 어떤 의미가 있습니다 수업. 최상위 클래스에서 일반적인 의미는 protected이 아닙니다.

(예제를 통해 배우려고 시도하는 문제 중 하나입니다.) 컴파일러가 예제를 거부하는 이유를 이해하는 데 어려움을 겪습니다. 컴파일러가 무엇이 잘못 되었는지를 "설명"하지 않기를 바랍니다. .)

+1

하지만 보호 된 클래스는 동일한 패키지 외부의 하위 클래스에서 볼 수 있으므로 보호를 허용 할만한 가치가 없습니다. –

+0

정확한 코드를 작성해야 해당 답변을 볼 수 있습니다. 정확한 컴파일 오류 메시지. –

+0

+1 보호 된 클래스 개념이 있다고하면 그 패키지는 동일한 패키지의 하위 클래스에서 볼 수 있으며 수정자를 정의하지 않으면 해당 클래스가 표시됩니다. – havexz

3

배우고 싶다면 java에 관한 책을 읽어야합니다.

클래스 액세스 수정 :

공공

클래스가의 일부 패키지 외부에서 액세스 할 수 있습니다 여기에 난 그냥 당신에게 작은 요지를 줄 수 있습니다.

기본

당신이 어떤 일을 지정 해달라고 할 때입니다. 클래스는 패키지에서 액세스 할 수 있으며, 패키지의 일부입니다.

그냥 명확하게 :

private 수정이 이해가되지 않습니다. 확장 또는 인스턴스 생성을 위해 어느 누구도 개인 클래스에 액세스 할 수 없으므로

protected 클래스 개념이 있다면 동일한 패키지의 하위 클래스에서 해당 클래스를 볼 수 있으며 수정자를 정의하지 않으면 해당 클래스가 표시됩니다.

다른 클래스의 속성 (이러한 수정에 액세스하지 않음) :

추상적 인

정의하면 클래스의 사용자가의 인스턴스를 만들 수 없습니다. 그리고 그것을 확장하는 클래스는 추상적 인 메소드를 구현하거나 자신을 추상적으로 정의해야합니다.

정의한 경우 최종

, 사용자는이 클래스를 확장 할 수 없습니다.

For more details about java as language read

[연습 액세스 수정]의