If all subclasses should override it, why do you want to provide a default implementation ?! it would be pointless, since no one would use it. However, you probably have your doAction code that you want to execute with any subclasses and some code that you want to override. In this case, you can create the following:
doAction(){
Thus, doAction has its own implementation, which ends with a call to specificAction, which must be implemented by subclasses
source share