So I know that in Java when you have a static method you are supposed to call it with the format ClassName.method() rather than use the same structure as you would for instance methods, namely:
ClassName myObject = new ClassName(); myObject.method(); However, if you were to do it this way it would still be valid code and would work. Let's say I decide to do this where the method in question is static, and have the following setup:
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 } } What prints out on the screen, however, is 5 rather than 6. Why?