Wie C++, Java unterstützt auch die Konstruktor kopieren . Aber in C++ es wird standardmäßig erstellt. Während wir in Java sind, definieren wir unseren eigenen Kopierkonstruktor. In diesem Abschnitt lernen wir das Kopierkonstruktor in Java mit einem Beispiel .
Konstrukteur
In Java, a Konstrukteur ist dasselbe wie eine Methode, der einzige Unterschied besteht jedoch darin, dass der Konstruktor denselben Namen wie der Klassenname hat. Es wird verwendet, um eine Instanz der Klasse zu erstellen. Es wird automatisch aufgerufen, wenn wir ein Objekt der Klasse erstellen. Es gibt keinen Rückgabetyp. Denken Sie daran, dass ein Konstruktor nicht sein kann abstrakt , Finale , synchronisiert , Und statisch . Wir können einen Konstruktor nicht überschreiben. Es belegt beim Aufruf etwas Speicherplatz im Speicher.
So konvertieren Sie einen String in ein int-Java-Format
Arten von Konstruktoren
- Standardkonstruktor
- Parametrisierter Konstruktor
Abgesehen von den beiden oben genannten Konstruktoren unterstützt Java auch den Kopierkonstruktor. Lassen Sie uns das im Detail besprechen.
Warum ist ein Kopierkonstruktor erforderlich?
Manchmal stehen wir vor einem Problem, bei dem wir eine exakte Kopie eines vorhandenen Objekts der Klasse erstellen müssen. Es gibt auch eine Bedingung: Wenn wir Änderungen an der Kopie vorgenommen haben, dürfen diese nicht im Original widergespiegelt werden und umgekehrt. Für solche Fälle bietet Java das Konzept eines an Konstruktor kopieren .
Konstruktor kopieren
In Java ist ein Kopierkonstruktor ein spezieller Konstruktortyp, der ein Objekt unter Verwendung eines anderen Objekts derselben Java-Klasse erstellt. Es gibt eine doppelte Kopie eines vorhandenen Objekts der Klasse zurück.
Wir können dem letzten Feld einen Wert zuweisen, aber das Gleiche ist nicht möglich, wenn wir die Methode clone() verwenden. Es wird verwendet, wenn wir eine tiefe Kopie eines vorhandenen Objekts erstellen möchten. Im Vergleich zur Methode clone() ist sie einfacher zu implementieren.
Hiba Bukhari
Hinweis: Es kann nicht von den Unterklassen geerbt werden. Wenn wir versuchen, ein untergeordnetes Klassenobjekt aus einer übergeordneten Klassenreferenz zu initialisieren, stehen wir vor dem Umwandlungsproblem, wenn wir es mit dem Kopierkonstruktor klonen.
Verwendung des Kopierkonstruktors
Wir können den Kopierkonstruktor verwenden, wenn wir Folgendes möchten:
Java-Zufallszahlengenerator
- Erstellen Sie eine Kopie eines Objekts mit mehreren Feldern.
- Erzeugen Sie eine tiefe Kopie der schweren Objekte.
- Vermeiden Sie die Verwendung der Methode Object.clone().
Vorteile des Copy Constructor
- Wenn ein Feld als endgültig deklariert ist, kann der Kopierkonstruktor es ändern.
- Eine Typisierung ist nicht erforderlich.
- Die Verwendung ist einfacher, wenn ein Objekt mehrere Felder hat.
- Das Hinzufügen von Feldern zur Klasse ist dadurch einfach. Wir müssen nur den Kopierkonstruktor ändern.
Erstellen eines Kopierkonstruktors
Um einen Kopierkonstruktor in Java zu erstellen, führen Sie die folgenden Schritte aus:
- Erstellen Sie einen Konstruktor, der ein Objekt derselben Klasse als Parameter akzeptiert.
public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } }
- Kopieren Sie jedes Feldobjekt (Variable) in die neu erstellte Instanz.
public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //copying each filed this.price = fruits.price; //getter this.name = fruits.name; //getter } }
Beispiel für einen Kopierkonstruktor
CopyConstructorExample.java
public class Fruit { private double fprice; private String fname; //constructor to initialize roll number and name of the student Fruit(double fPrice, String fName) { fprice = fPrice; fname = fName; } //creating a copy constructor Fruit(Fruit fruit) { System.out.println(' After invoking the Copy Constructor: '); fprice = fruit.fprice; fname = fruit.fname; } //creating a method that returns the price of the fruit double showPrice() { return fprice; } //creating a method that returns the name of the fruit String showName() { return fname; } //class to create student object and print roll number and name of the student public static void main(String args[]) { Fruit f1 = new Fruit(399, 'Ruby Roman Grapes'); System.out.println('Name of the first fruit: '+ f1.showName()); System.out.println('Price of the first fruit: '+ f1.showPrice()); //passing the parameters to the copy constructor Fruit f2 = new Fruit(f1); System.out.println('Name of the second fruit: '+ f2.showName()); System.out.println('Price of the second fruit: '+ f2.showPrice()); } }
Ausgabe:
Name of the first fruit: Ruby Roman Grapes Price of the first fruit: 399.0 After invoking the Copy Constructor: Name of the second fruit: Ruby Roman Grapes Price of the second fruit: 399.0
Kopieren Sie den Konstruktor im Vergleich zur clone()-Methode
Sowohl der Kopierkonstruktor als auch die clone()-Methode werden verwendet, um eine Kopie eines vorhandenen Objekts der Klasse zu erstellen. Die Verwendung des Kopierkonstruktors ist im Vergleich zur clone()-Methode jedoch aus den folgenden Gründen einfacher und besser:
- Wenn wir die clone()-Methode verwenden, ist es notwendig, die zu importieren Klonbar Die Methode kann die Ausnahme auslösen CloneNotSupportException. Daher ist die Behandlung der Ausnahme in einem Programm eine komplexe Aufgabe. Im Kopierkonstruktor gibt es solche Komplexitäten jedoch nicht.
- Wenn die Felder vorhanden sind, können wir keinen Wert zuweisen Finale . Im Kopierkonstruktor können wir den endgültigen Feldern Werte zuweisen.
- Das von der clone()-Methode zurückgegebene Objekt muss sein Typisierung . Im Kopierkonstruktor gibt es keine solche Anforderung.