Und weil man oft gar nicht will dass Funktionen überschrieben werden können. Eine virtuelle Funktion ist ein "extension point". Je mehr Funktionen man zu "extension points" macht, desto schwieriger wird es alle Sonderfälle abzudecken. Und desto schwieriger wird es eine API anzubieten bei der man wenig falsch machen kann.