[英]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文檔會聲明公共訪問修飾符允許到處訪問? 我知道我做錯了什么,但是到底是怎么回事?
這兩類沒有任何形式,形狀或形式的關聯。
您需要創建的實例TesterClass
在AnotherClass
,然后通過參考訪問變量。
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.