簡體   English   中英

私有變量是否與私有類中的package / default / no修飾符變量具有相同的訪問權限?

[英]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.

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