Virtual classes solve the extensibility problem of extending data abstraction with new functions and representations.
When a derived class inherits from a base class, it must define or override the virtual inner classes it inherited from the base class.