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.