Final-klassen en methoden

Final klassen zijn klassen die geen subklassen kunnen hebben. Ze worden gedefinieerd met het woord final.

public final class FinalClass{
    ...
}

Op die manier verhindert men dat er subklassen van een klasse gemaakt kunnen worden. Indien men toch subklassen wil toestaan, maar het vervangen van bepaalde methoden wil verhinderen, kan men deze methoden als final declareren.

public class MyClassa{
    public final void myFinalMethod() {
        ...
    }
}

Er zijn drie belangrijke redenen voor het gebruik van final klassen en methoden:

  1. Beveiliging: door klassen als final te definiëren, kunnen er geen subklassen van worden afgeleid. Dit verhindert dat men een subklasse zou maken met een andere implementatie. Men kan namelijk een subklasse maken die heel andere dingen doet dan verwacht wordt. Door het polymorfisme kunnen objecten van zo’n subklasse namelijk ook gebruikt worden als objecten van de superklasse. Deze objecten kunnen dan een gedrag hebben dat niet consistent is met de bedoeling van de superklasse
  2. Ontwerp: in het ontwerp van de klassenhiërarchie kan men ertoe komen om bepaalde klassen te definiëren die “af” zijn en bijgevolg geen subklassen meer nodig hebben
  3. Snelheid: bij final klassen en/of methoden weet de compiler vaak reeds bij de compilatie welke implementatie van een methode gebruikt wordt. Deze beslissing hoeft tijdens de uitvoering van het programma niet meer genomen te worden (late binding). Dit zorgt voor een hogere uitvoersnelheid