Overriding a virtual method in a generic class