If a class declares a static method, then the declaration of that method is said to hide any and all methods with the same signature in the superclasses and superinterfaces of the class that would otherwise be accessible to code in the class. A compile-time error occurs if a static method hides an instance method.
While the reference to an instance method is resolved at run-time based on the type of the referenced object; the reference to a static method is resolved at compile-time based on the type of the reference. Suppose the existence of an abstract superclass A and a concrete subclass C. Suppose that a reference, r, of type A refers to a concrete instance of type C. If r is used to invoke an instance method then the reference will resolve to the overriding implemenation in the subclass C. The same is not true for static methods. Since the reference to a static method is resolved at compile-time based on the type of the reference, the actual method referenced will be the static method in the superclass and not the subclass method. If a method could be declared both abstract and static, then the actual method referenced at run-time could be the abstract superclass method that provides no implementation
If an abstract class/interface is a contract for classes, and NOT objects
then how come it is NOT allowed to implement their methods as static.