所以我知道在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