posted 22 years ago
As far as I know, I do not have the definitive answer, but I think that I have a good one.
As you know, the JLS simply states that static methods can not be abstract. If I had to speculate on Sun's reasoning for that design choice, I would say that it is because a subclass does not override a static method declared in a super class. Instead, a subclass only hides a super class method. The differences between overriding and hiding are probably the motivation for the restriction.
The reference to a static method is resolved at compile time based on the type of the reference. If the reference has the type of the base class, then the base class method will be invoked at run time even if the reference object has a sub class type that hides the base class method. If the base class method is abstract, then the method invoked at runtime would have no implementation.
Dan Chisholm<br />SCJP 1.4<br /> <br /><a href="http://www.danchisholm.net/" target="_blank" rel="nofollow">Try my mock exam.</a>