Υπερφόρτωση κατασκευαστή μέσα Java
⚡ Έξυπνη Σύνοψη
Υπερφόρτωση κατασκευαστή μέσα Java επιτρέπει σε μια κλάση να δηλώσει πολλαπλούς κατασκευαστές που διαφέρουν ως προς τη λίστα παραμέτρων, παρέχοντας στους προγραμματιστές ευέλικτη αρχικοποίηση αντικειμένων, καθαρότερη επαναχρησιμοποίηση κώδικα μέσω this() και προβλέψιμη συμπεριφορά κάθε φορά που απαιτούνται προεπιλεγμένες ή προσαρμοσμένες τιμές κατά την έναρξη.
Τι είναι η υπερφόρτωση κατασκευαστή στο Java?
Υπερφόρτωση κατασκευαστή μέσα Java είναι μια τεχνική στην οποία μια κλάση δηλώνει πολλαπλούς κατασκευαστές που διαφέρουν στη λίστα παραμέτρων. Ο μεταγλωττιστής διαφοροποιεί αυτούς τους κατασκευαστές αναλύοντας τον αριθμό των παραμέτρων και τους τύπους δεδομένων τους.
Παραδείγματα έγκυρων κατασκευαστών για κλάση Λογαριασμός εμφανίζονται παρακάτω:
Account(int a); Account (int a,int b); Account (String a,int b);
Γιατί χρειαζόμαστε υπερφόρτωση κατασκευαστή στο Java?
Υπερφόρτωση κατασκευαστή μέσα Java Βελτιώνει την ευελιξία και την αποτελεσματικότητα του κώδικα επιτρέποντας την ύπαρξη πολλών κατασκευαστών σε μια κλάση, ο καθένας με διαφορετική λίστα παραμέτρων.
- Ευελιξία στη δημιουργία αντικειμένων: Η Υπερφόρτωση Κατασκευαστή σάς επιτρέπει να αρχικοποιείτε αντικείμενα με διάφορους τρόπους, ανάλογα με τον αριθμό ή τον τύπο των παραμέτρων.
- Code Επαναχρησιμοποίηση: Μπορείτε να επαναχρησιμοποιήσετε τη λογική του κατασκευαστή καλώντας έναν κατασκευαστή από έναν άλλο χρησιμοποιώντας το Αυτό() λέξη-κλειδί.
- Βελτιωμένη αναγνωσιμότητα: Οι υπερφορτωμένοι κατασκευαστές κάνουν τον κώδικα πιο διαισθητικό προσφέροντας συγκεκριμένες επιλογές για διαφορετικές ανάγκες αρχικοποίησης.
- Προεπιλεγμένη και προσαρμοσμένη εκκίνηση: Η Υπερφόρτωση Κατασκευαστή σάς επιτρέπει να δημιουργείτε εύκολα τόσο προεπιλεγμένα όσο και προσαρμοσμένα αρχικοποιημένα αντικείμενα.
Παράδειγμα: Υπερφόρτωση Κατασκευαστή σε Java
Το ακόλουθο παράδειγμα δείχνει την Υπερφόρτωση Κατασκευαστή σε Java χρησιμοποιώντας μια κλάση με όνομα Διαδήλωση.
Βήμα 1) Πληκτρολογήστε τον κωδικό στο πρόγραμμα επεξεργασίας.
class Demo{ int value1; int value2; /*Demo(){ value1 = 10; value2 = 20; System.out.println("Inside 1st Constructor"); }*/ Demo(int a){ value1 = a; System.out.println("Inside 2nd Constructor"); } Demo(int a,int b){ value1 = a; value2 = b; System.out.println("Inside 3rd Constructor"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); } public static void main(String args[]){ Demo d1 = new Demo(); Demo d2 = new Demo(30); Demo d3 = new Demo(30,40); d1.display(); d2.display(); d3.display(); } }
Βήμα 2) Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα.
Βήμα 3) Εμφανίζεται ένα σφάλμα. Προσπαθήστε να εντοπίσετε σφάλματα πριν προχωρήσετε στο επόμενο βήμα της Υπερφόρτωσης Κατασκευαστή στο Java.
Βήμα 4) Κάθε τάξη έχει μια προεπιλογή Κατασκευαστής μέσα JavaΟ προεπιλεγμένος κατασκευαστής για Επίδειξη τάξης is Διαδήλωση()Εάν δεν το παρέχετε, ο μεταγλωττιστής το δημιουργεί για εσάς και αρχικοποιεί τις μεταβλητές στις προεπιλεγμένες τιμές.
Ωστόσο, αν καθορίσετε έναν παραμετροποιημένο κατασκευαστή όπως Demo(int a) και θέλετε να χρησιμοποιήσετε την προεπιλογή Διαδήλωση(), είναι υποχρεωτικό να δηλωθεί ρητά.
Βήμα 5) Αποσχολιάστε τις γραμμές 4-8 του κώδικα και, στη συνέχεια, αποθηκεύστε, μεταγλωττίστε και εκτελέστε ξανά το πρόγραμμα για να παρατηρήσετε την αλλαγή στη συμπεριφορά.
Αλυσιδωτή σύνδεση κατασκευαστή Java
Εξετάστε ένα σενάριο όπου μια βασική τάξη επεκτείνεται από ένα παιδί. Κάθε φορά που δημιουργείται ένα αντικείμενο της θυγατρικής κλάσης, πρώτα καλείται ο κατασκευαστής της γονικής κλάσης. Αυτό ονομάζεται Αλυσιδωτή σύνδεση κατασκευαστών.
Παράδειγμα: Για να κατανοήσετε την αλυσιδωτή σύνδεση κατασκευαστών με υπερφόρτωση κατασκευαστών στο Java
Βήμα 1) Αντιγράψτε τον παρακάτω κώδικα στον επεξεργαστή.
class Demo{ int value1; int value2; Demo(){ value1 = 1; value2 = 2; System.out.println("Inside 1st Parent Constructor"); } Demo(int a){ value1 = a; System.out.println("Inside 2nd Parent Constructor"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); } public static void main(String args[]){ DemoChild d1 = new DemoChild(); d1.display(); } } class DemoChild extends Demo{ int value3; int value4; DemoChild(){ //super(5); value3 = 3; value4 = 4; System.out.println("Inside the Constructor of Child"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); System.out.println("Value1 === "+value3); System.out.println("Value2 === "+value4); } }
Βήμα 2) Εκτελέστε τον κώδικα. Λόγω της αλυσιδωτής σύνδεσης κατασκευαστών, όταν το αντικείμενο της θυγατρικής κλάσης DemoChild δημιουργείται, ο κατασκευαστής Διαδήλωση() της γονικής κλάσης καλείται πρώτα και ο κατασκευαστής DemoChild() του παιδιού τρέχει στη συνέχεια.
Αναμενόμενη παραγωγή:
Inside 1st Parent Constructor Inside the Constructor of Child Value1 === 1 Value2 === 2 Value1 === 3 Value2 === 4
Βήμα 3) Μπορεί να παρατηρήσετε ότι ο γονικός κατασκευαστής Διαδήλωση() εκτελείται από προεπιλογή. Για να καλέσετε τον υπερφορτωμένο κατασκευαστή Demo(int a) αντί αυτού, χρησιμοποιήστε τη λέξη-κλειδί "σούπερ".
Σύνταξη:
super(); --or-- super(parameter list);
Παράδειγμα: Αν ο γονικός σας κατασκευαστής είναι σαν Demo(Όνομα συμβολοσειράς, ακέραιος αριθμός a), θα διευκρινίσετε σούπερ("Java”, 5). Εάν χρησιμοποιείται, η λέξη-κλειδί μεγάλος πρέπει να είναι η πρώτη γραμμή κώδικα στον κατασκευαστή της θυγατρικής κλάσης.
Βήμα 4) Αποσχολιάστε τη γραμμή 26 και εκτελέστε τον κώδικα. Παρατηρήστε την έξοδο.
Παραγωγή:
Inside 2nd Parent Constructor Inside the Constructor of Child Value1 === 5 Value2 === 0 Value1 === 3 Value2 === 4

