Virtual function and polymorphism

In reply to verif_learner:

The downside is once virtual, always virtual—you cannot change it back.

In Java, all public methods are virtual by default, all protected and local methods are non-virtual by default. I suggest using that strategy.