[英]Java - private inner class public member
訪問級別修飾符如何改變內部私有類中成員的行為? 我有這個代碼
class Main {
private static class Inner {
private static int a = 1;
}
public static void main(String[] args) {
System.out.print(Inner.a);
}
}
我可以從外部類訪問屬性“ a”,無論它的訪問級別是公共的還是私有的(這對我來說已經很奇怪了)。 問題是:如果該屬性為“ public static int ”,則有什么區別 (考慮到Inner類是私有的,因此從“ Main”類的外部無法訪問)?
回顧
我看不出有什么不同
Inner
是私有的,只能從Main
內部訪問。 即使a
是公開的,但Inner
是私有的,不能從某一特定地點訪問的屬性a
是無關緊要的。
class Main {
private static class Inner {
public static int a = 1;
}
public static void main(String[] args) {
System.out.print(Inner.a);
}
}
跑步時
1
只要Inner
在同一個類中是靜態的( Main
),就始終可以從Main
類中的任何位置訪問Inner
(及其所有成員)。 它是Main
Class以外的私有對象。 如果我要訪問
Main main = new Main();
main.Inner; // Compilation Failure. Inner is not accessible
// Technically I would never do new Main(), but to illustrate I am doing so.
還是一個更明智的例子
class Main {
public static void main(String[] args) {
System.out.print(SomeClass.Inner);
}
}
class SomeClass{
private static class Inner {
public static int a = 1;
}
}
為了說明做的差a
私人或公共,考慮下面兩個例子
class Main {
public static void main(String[] args) {
System.out.print(SomeClass.Inner.a);
}
}
class SomeClass{
public static class Inner {
private static int a = 1; // If a is private, it produces an error above
//public static int a = 1; // This would not be an error
}
}
因此,在您的特定情況下,只要它在Main
類中,就沒有關系,但是如果在下一個示例中它在外部,則將很重要。
您可以將您的Inner
類視為類級別的屬性。 將其設為私有可防止在類之外訪問它。 由於它是內部類,因此內部類的變量屬於外部類,因此,無論訪問修飾符如何,外部類都可以訪問它們。
http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.