I want that when a child class overrides a method in a parent class, the super.method()
is called in that child method.
Is there any way to check this at compile time?
If not, how would I go about throwing a runtime exception when this happens?
There's no way to require this directly. What you can do, however, is something like:
public class MySuperclass {
public final void myExposedInterface() {
//do the things you always want to have happen here
overridableInterface();
}
protected void overridableInterface() {
//superclass implemention does nothing
}
}
public class MySubclass extends MySuperclass {
@Override
protected void overridableInterface() {
System.out.println("Subclass-specific code goes here");
}
}
This provides an internal interface-point that subclasses can use to add custom behavior to the public myExposedInterface()
method, while ensuring that the superclass behavior is always executed no matter what the subclass does.