簡體   English   中英

Java:訪問修飾符混亂

[英]Java: Access Modifier Confusion

根據Java文檔中的教程,可以在類,包,Sublcass和World級別上訪問公共成員。 但是說我創建兩個這樣的類:

public class TesterClass
{
    public int someNumber = 5;
}

public class AnotherClass
{
    public static void main( String [] args )
    {
         System.out.println( someNumber );
    }
}

並將它們保存在同一位置。 編譯AnotherClass ,將引發錯誤,指出無法識別變量someNumber 那么,為什么Java文檔會聲明公共訪問修飾符允許到處訪問? 我知道我做錯了什么,但是到底是怎么回事?

這兩類沒有任何形式,形狀或形式的關聯。

您需要創建的實例TesterClassAnotherClass ,然后通過參考訪問變量。

public class AnotherClass
{
    public static void main( String [] args )
    {
         TesterClass classRef = new TesterClass();
         System.out.println(classRef.someNumber);
    }
}

這將起作用並產生5的輸出。

但是,如果我們將count變量的access修飾符從public更改為private ,然后嘗試執行相同的操作,那么它將不再起作用。 除了聲明它的類之外,任何其他類都無法訪問count變量。


為了擴展Sotirios Delimanolis的評論,請考慮以下情形:

public class TesterClass
    {
        public int someNumber = 5;
    }

    public class CounterExampleClass
    {
        public int someNumber = 3;
    }

    public class AnotherClass
    {
        public static void main( String [] args )
        {
             System.out.println( someNumber );
        }
    }

根據您的邏輯,將打印3或5? 你不能說。 因此,變量是通過參考變量訪問的,參考類指示可以訪問哪些字段。

    TesterClass tRef = new TesterClass();
    tRef.someNumber; //5

    CounterExampleClass cRef = new CounterExampleClass();
    cRef.someNumber; //3

您引用的變量必然會帶來錯誤,因為在該類中未將其重新識別,請首先創建TesterClass的實例

    TesterClass testObj=new TesterClass();
//then call println 
System.out.println(testObj.someNumber);

永遠不要使用您尚未聲明的變量!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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