Μέχρι αυτή την εποχή, ελπίζω να έχετε γίνει κατανοητόμε τις λέξεις-κλειδιά όπως το στατικό και αυτό στη Java. Στη γλώσσα προγραμματισμού Java η λέξη 'τελικό' είναι μια λέξη-κλειδί που χρησιμοποιείται για διαφορετικούς σκοπούς και εδώ είναι ο κατάλογος όλων των πλαισίων όπου χρησιμοποιούμε το τελικό:
- Οι τελικές μεταβλητές δεν μπορούν να τροποποιηθούν μάλλον, δεν μπορούν να αρχίσουν εκ νέου.
- Οι τελικές μέθοδοι δεν μπορούν να αντικατασταθούν.
- Οι τελικές τάξεις δεν μπορούν να κληρονομηθούν.
Τώρα θα καταλάβουμε όλα αυτά, χρησιμοποιώντας τα ακόλουθα παραδείγματα για κάθε ένα από τα πλαίσια:
Προγράμματα
1. Πρόγραμμα για τελική μεταβλητή
public class Circle{ public static void main(String args[]){ final double PI = 3.14; final double radius = 3.50; System.out.println("Area of Circle is: "+(PI*Math.pow(radius,2))); radius = 3.75; System.out.println("Area of Circle is: "+(PI*Math.pow(radius,2))); } }
2. Πρόγραμμα τελικής μεθόδου
public class Figure { final public double calculateArea(double radius){ return Math.pow(radius,2); } } class Circle extends Figure{ public double calculateArea(double radius){ System.out.println("Overriding Not Allowed"); /* calculateArea() can not be overridden */ } } class Main{ public static void main(String args[]){ Circle circle = new Circle(); circle.calculateArea(1.23); } }
3. Πρόγραμμα για τελική κλάση
final class Circle{ final double PI = 3.14; double calculateArea(double radius){ return (PI*Math.pow(radius,2)); } } class Cylinder extends Circle{ double height = 10.0; double calculateArea(double radius){ return 2*((PI*Math.pow(radius,2))+(PI*radius*height)); } } class Main{ public static void main(String args[]){ Cylinder cylinder = new Cylinder(); cylinder.calculateArea(3.11); } }
Εξήγηση
Εάν οι μεταβλητές δηλώνονται ως τελικές χρησιμοποιώντας τελικόλέξη-κλειδί, μπορεί να αρχικοποιηθεί μόνο μία φορά και γενικά ορίζεται κατά τη διάρκεια της δήλωσης. Αν δεν αρχικοποιηθεί κατά τη διάρκεια της δήλωσης, η λεγόμενη τελική κενή μεταβλητή πρέπει να οριστεί μέσα στους κατασκευαστές, διαφορετικά θα πάρει σφάλμα κατά τη μεταγλώττιση.
Μόλις καθοριστεί, μπορεί να ξαναρχίσει εκ νέου. Εάν αρχικοποιηθεί, τότε θα υπάρξει σφάλμα σύνταξης. Από την έξοδο του πρώτου προγράμματος μπορεί να γίνει εύκολα.
Εάν οι μέθοδοι είναι δηλωμένες ως τελικές χρησιμοποιώντας τελικόλέξη-κλειδί σε μια τάξη, μπορεί να υπερφορτωθεί αλλά δεν μπορεί να αντικατασταθεί. Στο παράδειγμα που δίνεται παραπάνω, έχουμε οριστεί το τελικό calculateArea () στην κλάση Εικόνας, δεν θα μπορούσε να κληρονομηθεί και να αντικατασταθεί στην κλάση κλάσης Circle καθώς δίνει το σφάλμα χρόνου μεταγλώττισης.
Οι μέθοδοι δήλωσης ως τελικές ισοδυναμούν μειδιωτική μέθοδος αλλά για μεταβλητή δεν είναι αληθής και η τελική μεταβλητή δεν είναι καθόλου ισοδύναμη με τη σταθερή μεταβλητή όσο κατά τη στιγμή της δήλωσης της συστοιχίας ως τελικής, η κατάσταση του αντικειμένου του πίνακα μπορεί να τροποποιηθεί δηλαδή να μεταβληθεί έτσι ώστε να περιοριστούν οι τροποποιήσεις, πρέπει να γίνει αμετάβλητο αλλά όταν ένας πίνακας δηλώνεται ως σταθερός, δεν μπορεί να τροποποιηθεί ούτως ή άλλως.
Για να αποφευχθεί η κληρονομιά μιας τάξης, τοΗ εν λόγω κατηγορία θεωρείται τελική. Εδώ στο τρίτο πρόγραμμα, προσπαθήσαμε να κληρονομήσουμε την τελική κατηγορία, αλλά πήραμε λάθος compilation λέγοντας "δεν μπορεί να κληρονομήσει από τον τελικό κύκλο", μπορεί να παρατηρηθεί από την οθόνη-shot κατά τη σύνταξη.
Οπότε εδώ ο τελικός συζητείται διεξοδικά και νομίζω ότι θα σας βοηθήσει πολύ να καταλάβετε τον τελικό στην Java και όλες τις συνήθειες του.
Σχόλια