Jelenlegi hely

12.5. Végleges osztályok és metódusok

Végleges osztályok

A final kulcsszó segítségével deklarált változók értékét az inicializálás után nem lehet megváltoztatni, a leszármazott osztály nem módosíthatja, befolyásolhatja az eredeti működését. Fontos szempont a rendszer biztonságának növelése és az objektum orientált tervezés szempontjából.

Biztonság: Az egyik módszer, amit a hackerek használnak rendszerek feltörésénél, egy származtatott osztály létrehozása egy osztályból, majd helyettesítése az eredetivel. A származtatott osztály a metódushívás szempontjából úgy néz ki, mint az eredeti, de a viselkedése teljesen más is lehet, ami hibás működést eredményezhet. Ennek elkerülése érdekében deklarálhatjuk osztályunkat véglegessé, mely megakadályozza a származtatott osztályok létrehozását. A String osztály is végleges. Ez az osztály nélkülözhetetlen a Java Platform működéséhez. Ez biztosítja, hogy minden String a megfelelő módon működjön.

Ha megpróbáljuk lefordíttatni egy final osztály leszármazott osztályát, hibaüzenetet fogunk kapni.

Tervezés: Az objektumorientált tervezésnél érdemes megállapítani, hogy mely osztályokat szeretnénk véglegessé tenni, és tegyük is az adott osztályokat véglegessé a final módosító segítségével:

final class ChessAlgorithm {
    ...
}

Minden leszármaztatási próbálkozás hibás lesz.

Végleges metódusok

A final kulcsszót használjuk a deklarációban, ha azt akarjuk elérni, hogy ne lehessen a metódust származtatott osztályban felüldefiniálni. Az Object metódusai közül van, amelyik final típusú, és van, amelyik nem.

A következő példában a ChessAlgorithm osztályban a nextMove metódus tesszük véglegessé:

class ChessAlgorithm {
    ...
    final void nextMove(ChessPiece pieceMoved,
                        BoardLocation newLocation) {
        ...
    }
    ...
}