====== Final Κλάσεις και Μέθοδοι ====== Μπορείτε να δηλώσετε μία ή περισσότερες μεθόδους μία κλάσης ως //final//. Δηλώνοντας μία μέθοδο ως final η μέθοδος αυτή δεν μπορεί να επαναοριστεί σε μία υποκλάση της κλάσης αυτής. Ο συχνότερος λόγος για να δηλώσετε μία μέθοδο ως //final// είναι αν η υλοποίηση της μεθόδου δεν πρέπει να αλλάξει. Ένα παράδειγμα είναι το παρακάτω, όπου στην υλοποίηση ενός αλγορίθμου για σκάκι τα λευκά πιόνια παίζουν πάντα πρώτα: class ChessAlgorithm { enum ChessPlayer { WHITE, BLACK } ... final ChessPlayer getFirstPlayer() { return ChessPlayer.WHITE; } ... } Επίσης, μέθοδοι που καλούνται από τους κατασκευαστές της κλάσης ή για την αρχικοποίηση των μελών της κλάσης εκτός κατασκευαστών __θα πρέπει__ να ορίζονται ως //final//. Ο λόγος είναι ότι στην περίπτωση που οι μέθοδοι αυτές αλλάξουν την υλοποίηση τους σε υποκλάσεις μπορούν να δημιουργηθούν προβλήματα ως προς την ορθή αρχικοποίηση των πεδίων της κλάσης. Τέλος, μπορείτε να προσδιορίσετε μία κλάση ως //final//, όταν θέλετε να δηλώσετε ότι η συγκεκριμένη κλάση δεν πρέπει να έχει υποκλάσεις. Ένα παράδειγμα τέτοια κλάσης είναι η κλάση [[http://docs.oracle.com/javase/7/docs/api/java/lang/String.html | String]] της standard βιβλιοθήκης της Java. |Προηγούμενο: [[ :java:inheritance_subclassing_vs_encapsulating | Κριτήριo χρήσης της κληρονομικότητας ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[:java:super_operator | Ο τελεστής super]]|