したがって、Java では、静的メソッドがある場合ClassName.method()
、インスタンス メソッドの場合と同じ構造を使用するのではなく、次の形式で呼び出す必要があることを知っています。
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
}
}
ただし、画面に表示されるのは 6 ではなく 5 です。なぜですか?