說你有兩個類,如下所示:在Java中,爲什麼存儲爲父級的子級調用父級的靜態方法,但訪問子級的靜態數據成員?
class A{
static int statint = 5;
int instanceint = 5;
public void instanceMethod(){}
public static void staticMethod(){}
}
class B extends A{
static int statint = 6;
int instanceint = 6;
public void instanceMethod(){}
public static void staticMethod(){}
}
,然後你實例如下:
public static void main(String[] args){
A basa =new B(); //child(B) stored as parent(A) type
int i=basa.statint; /**gives you (child)B's static data member (6)**/
int j=basa.instanceint; //gives you (parent)A's instance data member (5)
basa.instanceMethod(); //calls (child)B's instanceMethod() version.
basa.staticMethod(); /**call's (parent)A's staticMethod() version.**/
}
我的問題是:孩子的靜態方法爲什麼能隱藏父的靜態數據成員,但不父母的靜態方法?我會認爲這不是或兩者兼而有之。我知道解決這個問題的方法 - 例如,對於靜態數據成員/方法訪問,使用ClassName.datamember
或ClassName.method()
表示法來確保調用正確的版本,例如變量,明確地向下將要存儲的孩子存儲在訪問變量時的子類型,與((B)basa).instanceint;
一樣,以獲得B的實例數據成員 - 我的問題更多的是爲了我自己的理解,爲什麼默認值對於隱藏靜態數據成員和從實例訪問的隱藏靜態方法看起來不一致)
[無法重現。](http://ideone.com/lKddAK) – user2357112 2014-09-06 07:07:18
它沒有。你誤會了。 – EJP 2014-09-06 07:54:05