Another option is to push greater responsibility down into the specific classes and have the application-specific code continue to deal in parent-class methods. For example, your power supply with a special feature probably needs a way for the User to configure that feature and observe the results. The application code could call methods like “Has special features.viâ€, “Show Configuration window.viâ€, “Get text description of status.viâ€. If the power supply has special features then show a description of the status of those features and show a button that lets the User open the Configuration window (possibly in a subpanel).