VM è il metodo corretto per esprime VM e discendenti.

Nella tua implementazione qualsiasi oggetto che non sia VMClass o discendente lancerà un eccezione a runtime, dovresti quantomeno documentarlo, oppure fare un controllo su cosa ti viene passato e agire di conseguenza.