When answering this question, it's important to be careful with the terminology of
overloading and overriding.
There are no restrictions on
overloading a static method. From the compiler's perspective, methods with different argument lists are considered different methods. But this is not overriding.
A method with the
static modifier belongs to the class, not to its objects. It uses static binding, which is why true
overriding in a subclass does not work.
However, you can declare a static method with the same signature in a subclass as in the parent class. In this case, it results in neither overloading nor overriding, but
shadowing. You cannot apply the
@Override annotation to such a method, and you cannot use the
super keyword within it.
If you call a static method from a variable rather than a type, shadowing can be dangerous. Without dynamic binding, the compiler knows only about the type of the variable, not the type of its value. If the declared type of the variable is the base class, the shadowed method will never be called. This is why, when attempting such a call, IDEs typically display a warning.