2014-09-03 3 views
1

저는 자바에서 꽤 초보자입니다. 저는 그 순간 "Thinking in Java"를 읽었습니다. 그래서 "Access Control"장을 이해하려고 시도하면서 나는 member 개인용 클래스의 멤버가 될 수 있으며 약간 혼란 스러웠습니다. 그래서이 문장을 확인하기로 결정했는데, 그런 코드를 컴파일하려고 할 때 오류가 발생했습니다. 다음은 간단한 예이다 :
비공개 패키지 클래스의 public 멤버에 액세스하려면 어떻게해야합니까?

PrivatePackageClass.java :

PublicAccessClass.java:8: error:
PrivatePackageClass is not public in simple.PrivatePackage; cannot be accessed from outside package
PrivatePackageClass.print(Arrays.toString(args));

오류의 설명이다

package simple.PrivatePackage; 

class PrivatePackageClass { 
    public static void print(Object obj) { 
     System.out.println(obj); 
    } 
} 

PublicAccessClass.java

package simple; 

import simple.PrivatePackage.*; 
import java.util.*; 

public class PublicAccessClass { 
    public static void main(String[] args) { 
     PrivatePackageClass.print(Arrays.toString(args)); 
    } 
} 

패키지 개인 클래스의 공용 멤버에 액세스 할 수있는 간단한 방법이 없다는 것이 맞습니까?

UPD! 고맙습니다. 두 코드가 모두 같은 패키지에 있다면 괜찮을 것입니다. 그러나 나는이 책의 진술에 대해 여전히 혼란 스럽다. 여기있다 : 사람이 될 수 있는지 설명해 수 있다면

As previously mentioned, if you don’t put an access specifier for class access, it defaults to package access. This means that an object of that class can be created by any other class in the package, but not outside the package. However, if a static member of that class is public, the client programmer can still access that static member even though they cannot create an object of that class.

내가 감사 할 것입니다.

+0

"Thinking Java"(2 년 후 두 번째)에서 인용 한이 이상한 성명서를 보았습니다 :) 실수가있는 것처럼 보입니다. 이 책은 물론 패키지 액세스 클래스를 다른 패키지로 가져올 수도 있습니다. – troy

답변

0

이 그것이 캔트 액세스 방법이 아닙니다 당신으로 귀하의 경우에는

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

그것을 읽어 잠시 시간을내어 자바

에 회원의 액세스 뒤에 개념을 이해에 도움이 될 것입니다 패키지로 공개 선언 됨

기본 멤버는 동일한 패키지 내에서만 액세스 할 수 있습니다.

0

PublicAccessClass에는 패키지 개인 액세스가 있으므로 해당 패키지 내의 클래스 만 액세스 할 수 있습니다.

simple.PublicAccessClasssimple.PrivatePackage.PublicAccessClass과 동일한 패키지에 없으므로 PublicAccessClass에 액세스 할 수 없습니다. 동일한 패키지에 있다면 코드가 작동합니다.

0

아니요, 불가능합니다. 클래스의 메소드에 대해 클래스 인 패키지의 멤버를 혼동하고 있다고 생각됩니다.

0

정적 멤버/메소드가 액세스 클래스의 객체를 생성 할 필요가 없습니다이 두 번째 쿼리에 응답 할 현재 파일

외부에서 액세스 할 수 있도록 수업 PrivatePackageClass가 액세스 한정자 공개가 선행되어야한다 .정적 멤버는 클래스에 속하며 객체에만 국한되지 않습니다.

관련 문제