Πώς να χρησιμοποιήσετε το Java final για κλάσεις, μεθόδους και μεταβλητές
Η λέξη-κλειδί final χρησιμοποιείται στη Java για τη δημιουργία στοιχείων που δεν μπορούν να αλλάξουν. Μπορείτε να εφαρμόσετε αυτόν τον τροποποιητή σε κλάσεις, μεθόδους και μεταβλητές. Συγκεκριμένα, χρησιμοποιείται για την αποφυγή σφαλμάτων και σκόπιμης κακής χρήσης εντός του κώδικα.
Τι είναι το Java final;
Οι περισσότερες γλώσσες προγραμματισμού επιτρέπουν την τροποποίηση και επέκταση του υπάρχοντος κώδικα όπως επιθυμείτε. Στην Java, αυτό είναι επίσης δυνατό, αλλά υπάρχουν περιπτώσεις όπου είναι ζωτικής σημασίας ένα στοιχείο να οριστεί ως αμετάβλητο. Στην Java, μπορείτε να το κάνετε αυτό χρησιμοποιώντας τον τροποποιητή final. Αυτός ο τροποποιητής χρησιμοποιείται για να περιορίσει την πρόσβαση σε μια κλάση, μια μέθοδο ή μια μεταβλητή. Μόλις μια μεταβλητή δηλωθεί ως τελική, η τιμή της δεν μπορεί να αλλάξει. Μια τελική κλάση δεν μπορεί να επεκταθεί και μια τελική μέθοδος δεν μπορεί να αντικατασταθεί. Αυτό βοηθά στην προστασία από την κατάχρηση αυτού του τμήματος του κώδικα.
Τελικές τάξεις
Εάν χρησιμοποιείτε Java final για μια κλάση, αυτή δεν μπορεί πλέον να επεκταθεί. Αυτή η προσέγγιση είναι πολύ συνηθισμένη και, σε πολλές περιπτώσεις, χρησιμοποιείται για να αποτρέψει την παράγωγο μιας υποκλάσης. Αυτό ισχύει για βασικούς τύπους δεδομένων όπως java.lang.Math ή java.lang.String, οι οποίοι δηλώνονται πάντα ως τελικοί. Ακόμα και αν θέλετε να αποτρέψετε την παράγωγο υποκλάσεων μιας κύριας κλάσης για άλλους λόγους, η χρήση Java final είναι ο καλύτερος τρόπος. Στο παρακάτω παράδειγμα, θα δημιουργήσουμε μια τελική κλάση και μια δεύτερη κλάση που θεωρητικά θα πρέπει να την επεκτείνει. Μετά από αυτό, ακολουθεί η κύρια κλάση με τη μέθοδο main.
final class FinalClass {
public void exampleMethod() {
System.out.println("This is a method within the final class.");
}
}
class AdditionalClass extends FinalClass {
public void exampleMethod() {
System.out.println("The method is now also available in the additional class.");
}
}
public class Main {
public static void main(String[] args) {
AdditionalClass ourAdditionalClass = new AdditionalClass();
ourAdditionalClass.exampleMethod();
}
}javaΤο αποτέλεσμα που θα λάβετε θα πρέπει να μοιάζει με αυτό:
Main.java:6: error: cannot inherit from final FinalClass
class AdditionalClass extends FinalClass
^
1 errorjavaΤελικές μέθοδοι
Εάν επισημάνετε μια μέθοδο ως τελική, δεν μπορεί να αντικατασταθεί. Αυτό εξασφαλίζει ότι μια μέθοδος σε μια υποκλάση δεν μπορεί να αλλάξει την προβλεπόμενη συμπεριφορά της. Για να το επιτύχετε αυτό, δηλώστε τη μέθοδο με τον τροποποιητή Java final. Για παράδειγμα, σκεφτείτε μια κλάση με το όνομα «Emperor» που περιλαμβάνει μια τελική μέθοδο με το όνομα «myTitle». Μια άλλη κλάση, η «King», η οποία επεκτείνει την «Emperor», προσπαθεί να αντικαταστήσει τη μέθοδο «myTitle». Στην κύρια μέθοδο, χρησιμοποιούμε μια παρουσία της «Prince» για να αποκτήσουμε πρόσβαση στη μέθοδο. Ο κώδικας έχει ως εξής:
public class Emperor {
public final void myTitle() {
System.out.println("I am the emperor.");
}
}
public class King extends Emperor {
public final void myTitle() {
System.out.println("I am the king.");
}
}
public class Prince {
public static void main(String[] args) {
King myTitle = new King();
King.myTitle();
}
}javaΕάν εφαρμόσετε τώρα αυτόν τον κώδικα, θα λάβετε ένα μήνυμα σφάλματος:
Main.java:9: error myTitle() in King cannot override myTitle() in Emperor public final void myTitle() {
^
overridden method is finaljavaΤελικές μεταβλητές
Η Java final χρησιμοποιείται επίσης για τη δημιουργία μεταβλητών με τιμές που δεν μπορούν να αλλάξουν στη συνέχεια. Αυτό είναι ιδιαίτερα σημαντικό εάν ορισμένες μεταβλητές πρέπει να παραμείνουν σταθερές εντός του κώδικα. Στο παρακάτω παράδειγμα, θα δημιουργήσουμε τη μεταβλητή x, η οποία έχει την τιμή 5. Στη συνέχεια, θα προσπαθήσουμε να εισαγάγουμε αυτή τη μεταβλητή και να της εκχωρήσουμε μια νέα τιμή. Ο κώδικας έχει την εξής μορφή:
public class Main {
final int x = 5;
public static void main(String[] args) {
Main newValue = new Main();
newValue.x = 10;
System.out.println(newValue.x);
}
}javaΌταν χρησιμοποιούμε την εντολή Java System.out.println για να εμφανίσουμε το αποτέλεσμα, λαμβάνουμε το ακόλουθο μήνυμα σφάλματος:
Main.java:6: error: cannot assign a value to final variable x
newValue.x = 10;
^
1 errorjavaΔημιουργία κενών τελικών μεταβλητών
Οι μεταβλητές πρέπει πάντα να αρχικοποιούνται στη Java. Ωστόσο, αν δηλώσετε μια κενή τελική μεταβλητή, μπορείτε να την αρχικοποιήσετε με έναν κατασκευαστή κλάσης. Ο κώδικας έχει την εξής μορφή:
public class Example {
final String exampleText;
Example() {
exampleText = "Here is your message.";
}
public static void main(String[] args) {
Example newObject = new Example();
System.out.println(newObject.exampleText);
}
}javaΕάν εκτελέσετε αυτόν τον κώδικα, θα λάβετε την ακόλουθη πρόταση ως έξοδο:
Here is your message.java