簡體   English   中英

Java-私有內部類公共成員

[英]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”類的外部無法訪問)?

回顧

  • 該屬性是私有的:我可以從Main訪問它,但是不能從Main外部訪問它(因為Inner是私有的)
  • 該屬性是public:我仍然可以從Main來訪問它,但是不能從Main外部訪問它(因為Inner是私有的)

我看不出有什么不同

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM