有人可以解釋這種行爲嗎?它是一個錯誤還是我缺少一些明顯的東西?Java-Access Speficier
1)創建2個軟件包,比如pack1和pack2放在同一個目錄下。
2)在PACK1創建類X
package pack1;
import pack2.*;
public class X
{
void eat()
{
System.out.println("X eat");
}
public static void main(String args[])
{
X x = new Y();
x.eat(); //accessing eat() method on Instance of Y.
//But since eat() is not public or protected its visibility must be limited to class X
System.out.println("Done");
}
}
3)現在,在PACK2創建一個Y級
package pack2;
import pack1.*;
public class Y extends X
{
}
的方法,吃不應該提供給Y類,因爲它有'默認「訪問說明符,這會限制它對聲明的包的可見性(包X)。所以,這個方法不應該在類Y中可用。但是當我編譯並執行這段代碼時,它工作正常。它不違反'默認'訪問說明符嗎?如果我將X x = new Y()更改爲Y x = new Y(),則編譯失敗!
在複製中,用'package private'替換'private'作爲答案。可訪問性是基於調用方法的表達式的靜態類型來確定的。在你的情況下,'X',而不是'Y'。 –