所以我知道在Java中,當你有你應該與格式ClassName.method()
調用它,而不是使用相同的結構,你會爲實例方法,即靜態方法:但是,如果你在Java中繼承靜態方法?
ClassName myObject = new ClassName();
myObject.method();
要這樣做它仍然是有效的代碼,並會工作。比方說,我決定這樣做,其中有問題的方法是靜態的,並且具有以下設置:
public SuperClass {
public static int foo(int x) {
return x;
}
}
public SubClass extends SuperClass {
public static int foo(int x) { // Overriding foo() in SuperClass
return x + 1;
}
}
public MyDriver {
public static void main(String[] args) {
SuperClass myObject = new SubClass(); // Upcasting.
System.out.println(myObject.foo(5)); // This should polymorphically print 6
}
}
什麼打印出屏幕上,但是,5而不是6.爲什麼?
這不是真的只有一個實例,它是每個虛擬機一個,如果你有一個以上的虛擬機,你可能有多個實例。 – luisZavaleta
+1,但取決於ClassLoader體系結構,它甚至可能會超過每個JVM一個;例如OSGi。 – earcam