考慮以下非法代碼: -我不明白這種繼承功能
class WrongCode{
int i;
static int i;
}
這裏,編譯器說,我們在同一個班級重複的字段。
現在,考慮在同一文件中的以下類。
class Parent{
int i = 10;
}
class Child extends Parent{
static int i = 100;
}
public class Main{
public static void main(String ... aaa){
Parent ob = new Child();
System.out.println(ob.i); // This prints Parent's i
}
}
由於實際對象是Child,因此不應該參考Child's i嗎?如果它指的是家長的「我」,那麼在某種程度上,它也會在其自己的班級中擁有家長的「我」以及不允許的自己的靜態「我」。
孩子靜態我overshadows父母我。父母的我不是靜態的,那麼它如何直接使用實例而不是className來訪問?
嘗試'Child ob = new Child();'得到派生的'i'。 – 2012-01-06 06:44:06
在Child類中,讓我非靜態的,看看會發生什麼?它仍然應該打印父母我。 – 2012-01-06 06:47:13
@βнɛƨнǤʋяʋиɢ讓我在Child中是非靜態的,結果相同。 – whitehat 2012-01-06 06:49:30