+ 5
Overriding static method in java
By the definition of hiding, the method in the subclass is hiding the one in the superclass. I don't see how the subclass is "covering up/hiding" the superclass static method, as the superclass's method is the one that's actually called https://code.sololearn.com/c86JJRjpXI3c/?ref=app
2 Answers
+ 2
Static methods can not be overriding, what you observe is known as hiding the static method. A method of the same class as the variable will be called.
0
Static methods are usually invoked by "ClassName.staticMethod()" since they are tied to the class itself and not too a specific instance of the class. Though possible to invoke them with "classObject.staticMethod()" as you did, this is not recommended.
Your code is a perefect example of why this second form is a bad idea. The compiler uses the declared class type of the variable to determine which static method to call. So even though the variable is storing an object of the subclass B, the variable is declared as type class A and so A.show() is the static method called. Since this is contrary to normal override behavior, most compilers will generate a warning to let you know output may be different than expected.