logo

Exemplu de constructor de copiere Java

La fel ca C++, Java sprijină de asemenea constructor de copiere . Dar în C++ este creat implicit. În timp ce în Java definim propriul constructor de copiere. În această secțiune, vom învăța constructor de copiere în Java cu un exemplu .

Constructor

În Java, a constructor este la fel ca o metodă, dar singura diferență este că constructorul are același nume ca și numele clasei. Este folosit pentru a crea o instanță a clasei. Este apelat automat atunci când creăm un obiect al clasei. Nu are niciun tip de returnare. Amintiți-vă că un constructor nu poate fi abstract , final , sincronizate , și static . Nu putem suprascrie un constructor. Ocupă ceva spațiu în memorie atunci când este apelat.

Tipuri de constructori

  • Constructor implicit
  • Constructor parametrizat

Cu excepția celor doi constructori de mai sus, Java acceptă și constructorul de copiere. Să o discutăm în detaliu.

De ce este necesar constructorul de copiere?

Uneori, ne confruntăm cu o problemă în care trebuia să creăm o copie exactă a unui obiect existent al clasei. Există, de asemenea, o condiție, dacă am făcut modificări în copie, aceasta nu ar trebui să se reflecte în cea originală și invers. Pentru astfel de cazuri, Java oferă conceptul de a constructor de copiere .

lista comparabila

Copie constructor

În Java, un constructor de copiere este un tip special de constructor care creează un obiect folosind un alt obiect din aceeași clasă Java. Returnează o copie duplicată a unui obiect existent al clasei.

Putem atribui o valoare câmpului final, dar același lucru nu se poate face în timpul utilizării metodei clone(). Este folosit dacă dorim să creăm o copie profundă a unui obiect existent. Este mai ușor de implementat în comparație cu metoda clone().

Notă: nu poate fi moștenit de subclase. Dacă încercăm să inițializam un obiect de clasă copil dintr-o referință de clasă părinte, ne confruntăm cu problema casting atunci când îl clonăm cu constructorul de copiere.

Utilizarea Copy Constructorului

Putem folosi constructorul de copiere dacă dorim să:

  • Creați o copie a unui obiect care are mai multe câmpuri.
  • Generați o copie profundă a obiectelor grele.
  • Evitați utilizarea metodei Object.clone().

Avantajele Copy Constructor

  • Dacă un câmp este declarat final, constructorul de copiere îl poate schimba.
  • Nu este nevoie de tipărire.
  • Utilizarea lui este mai ușoară dacă un obiect are mai multe câmpuri.
  • Adăugarea unui câmp la clasă este ușoară din cauza asta. Trebuie să schimbăm numai în constructorul de copiere.

Crearea unui constructor de copiere

Pentru a crea un constructor de copiere în Java, urmați pașii de mai jos:

  • Creați un constructor care acceptă un obiect din aceeași clasă ca parametru.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Copiați fiecare obiect câmp (variabil) în instanța nou creată.
 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 } } 

Exemplu de constructor de copiere

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()); } } 

Ieșire:

 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 

Copiați metoda constructorului vs clone().

Atât constructorul de copiere, cât și metoda clone() sunt folosite pentru a crea o copie a unui obiect existent al clasei. Dar utilizarea constructorului de copiere este mai ușoară și mai bună în comparație cu metoda clone() din motivele prezentate mai jos:

  • Dacă folosim metoda clone() este necesar să importam Clonabil Metoda poate arunca o excepție CloneNotSupportException. Deci, gestionarea excepției într-un program este o sarcină complexă. În timp ce în constructorul de copiere nu există astfel de complexități.
  • Nu putem atribui o valoare dacă câmpurile sunt final . În timp ce în constructorul de copiere, putem aloca valori câmpurilor finale.
  • Obiectul returnat de metoda clone() trebuie să fie tipat . În timp ce în constructorul de copiere, nu există o astfel de cerință.