Υπερφόρτωση κατασκευαστή μέσα Java

Σε τι υπερφόρτωση κατασκευαστή Java?

Java Η υπερφόρτωση κατασκευαστή είναι μια τεχνική στην οποία μια κλάση μπορεί να έχει οποιονδήποτε αριθμό κατασκευαστών που διαφέρουν στη λίστα παραμέτρων. Ο μεταγλωττιστής διαφοροποιεί αυτούς τους κατασκευαστές λαμβάνοντας υπόψη τον αριθμό των παραμέτρων στη λίστα και τον τύπο τους.

Παραδείγματα έγκυρων κατασκευαστών για λογαριασμό κλάσης είναι

Account(int a);
Account (int a,int b);
Account (String a,int b);

Παράδειγμα 2: Για να κατανοήσετε την υπερφόρτωση κατασκευαστή 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. Προεπιλεγμένος υπερφορτωμένος κατασκευαστής Java για Επίδειξη τάξης is Διαδήλωση(). Σε περίπτωση που δεν παρέχετε αυτόν τον κατασκευαστή, ο μεταγλωττιστής τον δημιουργεί για εσάς και αρχικοποιεί τις μεταβλητές σε προεπιλεγμένες τιμές. Μπορείτε να επιλέξετε να παρακάμψετε αυτόν τον προεπιλεγμένο κατασκευαστή και να αρχικοποιήσετε τις μεταβλητές στις επιθυμητές τιμές, όπως φαίνεται στο Παράδειγμα 1.

Αλλά αν καθορίσετε έναν παραμετροποιημένο κατασκευαστή όπως το Demo(int a), και θέλετε να χρησιμοποιήσετε τον προεπιλεγμένο κατασκευαστή Java Demo(), είναι υποχρεωτικό να το καθορίσετε.

Με άλλα λόγια, σε περίπτωση υπερφόρτωσης του κατασκευαστή σας Java παρακάμπτεται και θέλετε να χρησιμοποιήσετε τον προεπιλεγμένο κατασκευαστή Java, πρέπει να διευκρινιστεί.

Βήμα 5) Γραμμή μη σχολιασμού # 4-8. Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα.

Γιατί χρειαζόμαστε την Υπερφόρτωση Κατασκευαστή Java?

Υπερφόρτωση κατασκευαστή μέσα Java επιτρέπει πολλαπλούς κατασκευαστές σε μια κλάση, καθένας από τους οποίους έχει διαφορετικές λίστες παραμέτρων. Ενισχύει την ευελιξία και βελτιώνει την αποτελεσματικότητα του κώδικα.

  • Ευελιξία στη δημιουργία αντικειμένων: Η υπερφόρτωση κατασκευαστή σάς επιτρέπει να αρχικοποιείτε αντικείμενα με διάφορους τρόπους, ανάλογα με τον αριθμό ή τον τύπο των παραμέτρων.
  • Επαναχρησιμοποίηση κώδικα: Μπορείτε να χρησιμοποιήσετε ξανά τη λογική του κατασκευαστή καλώντας έναν κατασκευαστή από έναν άλλο χρησιμοποιώντας τη λέξη-κλειδί this().
  • Βελτιωμένη αναγνωσιμότητα: Οι υπερφορτωμένοι κατασκευαστές βοηθούν να γίνει ο κώδικας πιο διαισθητικός, προσφέροντας συγκεκριμένες επιλογές κατασκευαστή για διαφορετικές ανάγκες αρχικοποίησης.
  • Προεπιλεγμένη και προσαρμοσμένη εκκίνηση: Η υπερφόρτωση κατασκευαστή σάς επιτρέπει να δημιουργείτε εύκολα τόσο προεπιλεγμένα όσο και προσαρμοσμένα αρχικοποιημένα αντικείμενα.

Συχνές Ερωτήσεις

Κατασκευαστής είναι μια ειδική μέθοδος που χρησιμοποιείται για την προετοιμασία ενός νεοδημιουργημένου αντικειμένου και καλείται αμέσως μετά την εκχώρηση της μνήμης για το αντικείμενο. Μπορεί να χρησιμοποιηθεί για την προετοιμασία των αντικειμένων σε επιθυμητές τιμές ή προεπιλεγμένες τιμές κατά τη στιγμή της δημιουργίας του αντικειμένου. Δεν είναι υποχρεωτικό για τον κωδικοποιητή να γράψει έναν κατασκευαστή για μια κλάση.

Εάν δεν παρέχεται κατασκευαστής που ορίζεται από το χρήστη για μια κλάση, ο μεταγλωττιστής αρχικοποιεί τις μεταβλητές μέλους στις προεπιλεγμένες τιμές του.

  • Οι αριθμητικοί τύποι δεδομένων έχουν οριστεί σε 0
  • Οι τύποι δεδομένων χαρακτήρες ορίζονται σε μηδενικό χαρακτήρα('\0')
  • Οι μεταβλητές αναφοράς ορίζονται σε null

  1. Έχει το ίδιο όνομα ως τάξη
  2. Δεν πρέπει να επιστρέψει μια τιμή ούτε καν void

Παράδειγμα 1: Δημιουργήστε τον πρώτο σας κατασκευαστή στο Java

Βήμα 1) Πληκτρολογήστε το ακόλουθο πρόγραμμα κατασκευής Java συντάκτης.

class Demo{
      int  value1;
      int  value2;
      Demo(){
         value1 = 10;
         value2 = 20;
         System.out.println("Inside Constructor");
     }
 
     public void display(){
        System.out.println("Value1 === "+value1);
        System.out.println("Value2 === "+value2);
    }
 
   public static void main(String args[]){
       Demo d1 = new Demo();
      d1.display();
  }
}

Βήμα 2) Αποθηκεύστε, εκτελέστε και μεταγλωττίστε το πρόγραμμα κατασκευής στο Java και παρατηρήστε την έξοδο.

Αναμενόμενη παραγωγή:

Inside Constructor
Value1 === 10
Value2 === 20

Εξετάστε ένα σενάριο όπου μια βασική τάξη επεκτείνεται από ένα παιδί. Κάθε φορά που δημιουργείται ένα αντικείμενο της θυγατρικής κλάσης, πρώτα καλείται ο κατασκευαστής της γονικής κλάσης. Αυτό ονομάζεται Αλυσίδα κατασκευαστή.

Παράδειγμα 3: Για να κατανοήσετε την αλυσίδα κατασκευής

Βήμα 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, καλείται πρώτα ο κατασκευαστής Demo() της γονικής κλάσης και αργότερα δημιουργείται ο κατασκευαστής DemoChild() του παιδιού.

Αναμενόμενη παραγωγή:

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

Βήμα 3) Μπορείτε να παρατηρήσετε ότι ο κατασκευαστής της γονικής κλάσης Demo έχει παρακαμφθεί. Τι γίνεται αν θέλετε να καλέσετε τον παρακαμφθέντα κατασκευαστή Demo(int a) αντί για τον προεπιλεγμένο κατασκευαστή Demo() όταν δημιουργείται το θυγατρικό σας αντικείμενο;

Σε τέτοιες περιπτώσεις, μπορείτε να χρησιμοποιήσετε τη λέξη-κλειδί "σούπερ" για να καλέσετε παρακαμφθέντες κατασκευαστές της γονικής κλάσης.

Σύνταξη:-

super();
--or--
super(parameter list);

Παράδειγμα: Αν ο κατασκευαστής σας είναι σαν Επίδειξη (Όνομα συμβολοσειράς, in a), θα διευκρινίσετε σούπερ("Java”, 5). Εάν χρησιμοποιείται, η λέξη-κλειδί Το super πρέπει να είναι η πρώτη γραμμή κώδικα στον κατασκευαστή της παιδικής τάξης.

Βήμα 4) Καταργήστε το σχόλιο της γραμμής # 26 και εκτελέστε τον κωδικό. Παρατηρήστε την έξοδο.

Παραγωγή:

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4