You can't do what you're trying to do. You can cast to a superclass, but
polymorphism means that you'll still be calling the version of
perform_work() in the subclass. Which means that in your code the method is calling itself, which leads to a stack overflow.
The only way to call the superclass method is via
super.perform_work(), but that only calls the version in the immediate superclass.