Zoals C++, Java ondersteunt ook de kopieer constructeur . Maar in C++ het wordt standaard gemaakt. Terwijl we in Java onze eigen kopieerconstructor definiëren. In dit gedeelte leren we de kopieer de constructor in Java met een voorbeeld .
Constructeur
Op Java is een bouwer is hetzelfde als een methode, maar het enige verschil is dat de constructor dezelfde naam heeft als de klassenaam. Het wordt gebruikt om een instantie van de klasse te maken. Het wordt automatisch aangeroepen wanneer we een object van de klasse maken. Het heeft geen retourtype. Onthoud dat een constructor dat niet kan zijn abstract , laatste , gesynchroniseerd , En statisch . We kunnen een constructor niet overschrijven. Het neemt wat ruimte in het geheugen in beslag wanneer het wordt aangeroepen.
Soorten constructeurs
- Standaardconstructeur
- Geparametriseerde constructor
Behalve de twee bovenstaande constructors ondersteunt Java ook de kopieerconstructor. Laten we het in detail bespreken.
Waarom is een kopieerconstructor vereist?
Soms worden we geconfronteerd met een probleem waarbij we een exacte kopie van een bestaand object van de klasse moesten maken. Er is ook een voorwaarde: als we wijzigingen in de kopie hebben aangebracht, mogen deze niet in het origineel worden weerspiegeld, en omgekeerd. Voor dergelijke gevallen biedt Java het concept van a kopieer constructeur .
Kopieer constructeur
In Java is een kopieconstructor een speciaal type constructor dat een object maakt met behulp van een ander object van dezelfde Java-klasse. Het retourneert een duplicaat van een bestaand object van de klasse.
We kunnen een waarde aan het laatste veld toekennen, maar hetzelfde kan niet worden gedaan als we de clone() -methode gebruiken. Het wordt gebruikt als we een diepe kopie van een bestaand object willen maken. Het is eenvoudiger te implementeren in vergelijking met de clone() -methode.
Opmerking: het kan niet worden overgenomen door de subklassen. Als we proberen een onderliggend klasseobject te initialiseren vanuit een ouderklassereferentie, worden we geconfronteerd met het castingprobleem bij het klonen ervan met de kopieerconstructor.
Gebruik van CopyConstructor
We kunnen de kopieerconstructor gebruiken als we het volgende willen:
- Maak een kopie van een object dat meerdere velden heeft.
- Genereer een diepe kopie van de zware objecten.
- Vermijd het gebruik van de Object.clone() methode.
Voordelen van Copy Constructor
- Als een veld als definitief wordt gedeclareerd, kan de kopieerconstructor dit wijzigen.
- Typecasting is niet nodig.
- Het gebruik ervan is eenvoudiger als een object meerdere velden heeft.
- Het toevoegen van een veld aan de klas is hierdoor eenvoudig. We hoeven alleen de kopieconstructor te wijzigen.
Een kopieerconstructor maken
Volg de onderstaande stappen om een kopieerconstructor in Java te maken:
- Maak een constructor die een object van dezelfde klasse als parameter accepteert.
public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } }
- Kopieer elk veldobject (variabel) naar het nieuw gemaakte exemplaar.
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 } }
Voorbeeld van Copy Constructor
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()); } }
Uitgang:
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
Kopieer Constructor versus kloon()-methode
Zowel de copy-constructor als de clone()-methode worden gebruikt om een kopie te maken van een bestaand object van de klasse. Maar het gebruik van de copy-constructor is eenvoudiger en beter in vergelijking met de clone()-methode vanwege de onderstaande redenen:
- Als we de clone()-methode gebruiken, is het noodzakelijk om de Kloonbaar De methode kan de uitzondering genereren CloneNotSupportException. Het afhandelen van de uitzonderingen in een programma is dus een complexe taak. Terwijl er in de copy-constructor dergelijke complexiteiten niet zijn.
- We kunnen geen waarde toekennen als de velden dat wel zijn laatste . In de kopieerconstructor kunnen we waarden aan de laatste velden toewijzen.
- Het object dat door de clone()-methode wordt geretourneerd, moet zijn getypeerd . In de copy-constructor bestaat een dergelijke vereiste niet.