posted 21 years ago
hi roger,
i'll first enumerate some facts,
1. abstract method is the one which is not implemented in a particular class and so it must be implemented by the child class.
2. now, if there is any abstract method then the class must be abstract
3. we can't instantiate an abstract class. we must subclass it to a concrete class
4. static methods can be accessed by a class name w/o creating an instance of the class
5. static methods can't be overridden, they can only be shadowed
considering these facts, if v want to declare a abstract static method in a class then what happens?
1. that method won't have definition as its abstract
2. as it is static it must be accessible via just the class name
here there is a problem in our case. why? because we can't invoke a method that has no implementation. right? and the compiler knows that there is no possible subclass of the abstract class that might have implemented that method because the method is static and fact 5 from the above list constraints that static method can't be overridden. here jvm always invokes a method from the reference type declaration rather than runtime type.
so compiler gives us the error if we try to declare abstract static method.
okay try this,
the output is,
Parent.print1()
Child.print1()
as v see here even if the 'p' is of type Child() it invoked method of Parent because print1() is static and 'p' is of ref type Parent in the declaration. now, if we make print1() abstract in Parent then what happens to the above program? it won't work. right? because it will try to invoke print1() in Parent class which is not defined.
hope i am able to help a little.
regards
maulin