[英]Does private variables have the same access as package/default/no modifier variables in private classes?
私有變量是否與私有類中的package / default / no修飾符變量具有相同的訪問權限?
public class PublicClass {
public void test() {
InnerClass in = new InnerClass();
in.name1 = "a";
in.name2 = "b";
in.getName1();
in.getName2();
}
private class InnerClass {
private String name1;
String name2;
private String getName1() {
return name1;
}
String getName2() {
return name2;
}
}
}
方法test可以訪問name1和name2,那么,在私有類中的變量上設置私有的目的是什么?
更新:一個很好的示例代碼,說明了private關鍵字實際上如何禁止訪問。
私有成員可以在頂級封閉類中的任何位置訪問,即JLS 6.6.1中定義的PublicClass
:
如果成員或構造函數被聲明為私有,則僅當訪問發生在封裝成員或構造函數的聲明的頂級類(第7.6節)的主體內時,才允許訪問。
因此,無法阻止方法訪問內部類的私有成員。
由於您的內部類是私有的,因此您可以按所需方式聲明其成員(包括公共),因此只能在OuterClass
訪問它們。
private
表示/允許在同一(頂層)類中訪問。 您正在使用內部類...
根據Java語言規范:
私有類成員或構造函數只能在頂級類的主體內訪問(第7.6節)
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.1
因此,在這種情況下,在內部私有類中聲明私有方法/字段的用處不大。 如果將InnerClass
移到PublicClass
的主體之外(仍然可以在同一文件中,盡管不能將這些類聲明為私有),則您會看到不同之處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.