Так что я знаю, что в 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