2014-09-03 145 views
1

我是Java的新手,我正在閱讀「Thinking in Java」。所以,當我試圖瞭解「訪問控制」一章時,我已經讀過,有可能訪問公共成員包私人類,並有點困惑。所以我決定檢查這個語句,但是當我試圖編譯這樣的代碼時,我得到一個錯誤。這裏有一個簡單的例子:
如何訪問私有包類的公共成員?

PrivatePackageClass.java:

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)); 
    } 
} 

這就是錯誤的描述:

PublicAccessClass.java:8: error:
PrivatePackageClass is not public in simple.PrivatePackage; cannot be accessed from outside package
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

我正在讀這本書「思考Java」(2年後的第二次),並遇到了你引用這個奇怪的聲明:)似乎有一個錯誤這本書,當然你甚至不能將包訪問類導入其他包,更不用說訪問它的任何成員。 – troy 2015-12-28 21:33:00

回答

0

PublicAccessClass具有包私人訪問權限,因此只有包中的類才能訪問它。

simple.PublicAccessClasssimple.PrivatePackage.PublicAccessClass不在同一個包中,因此PublicAccessClass無法訪問它。如果他們在同一個軟件包中,你的代碼就可以工作。

0

不,你不能。在我看來,你現在正在將一個包的類的成員混淆到一個類的方法中。

0

您的類PrivatePackageClass必須由訪問修飾符公衆之前爲它是當前文件

外部訪問要回答你的第二個查詢靜態成員/方法不需要創建一個類的對象訪問。靜態成員屬於一個類,而不是特定於對象