logo

Primer Java Copy Constructor

Tako kot C++, Java podpira tudi konstruktor kopiranja . Ampak v C++ ustvarjen je privzeto. Medtem ko v Javi sami definiramo konstruktor kopiranja. V tem razdelku se bomo naučili konstruktor kopiranja v Javi s primerom .

Konstruktor

V Javi je a konstruktor je enako kot metoda, vendar je edina razlika v tem, da ima konstruktor isto ime kot ime razreda. Uporablja se za ustvarjanje primerka razreda. Pokliče se samodejno, ko ustvarimo objekt razreda. Nima povratne vrste. Ne pozabite, da konstruktor ne more biti povzetek , dokončno , sinhronizirano , in statična . Konstruktorja ne moremo preglasiti. Ob klicu zasede nekaj prostora v pomnilniku.

Vrste konstruktorjev

  • Privzeti konstruktor
  • Parametriziran konstruktor

Razen zgornjih dveh konstruktorjev Java podpira tudi konstruktor kopiranja. Pogovorimo se o tem podrobno.

Zakaj je potreben konstruktor kopiranja?

Včasih se soočimo s težavo, ko moramo ustvariti natančno kopijo obstoječega predmeta razreda. Obstaja tudi pogoj, če smo naredili kakršne koli spremembe v kopiji, se to ne sme odražati v originalu in obratno. Za takšne primere Java nudi koncept a konstruktor kopiranja .

Konstruktor Kopiraj

V Javi je kopirni konstruktor posebna vrsta konstruktorja, ki ustvari objekt z uporabo drugega predmeta istega razreda Java. Vrne podvojeno kopijo obstoječega predmeta razreda.

Končnemu polju lahko dodelimo vrednost, vendar tega ni mogoče storiti z uporabo metode clone(). Uporablja se, če želimo ustvariti globoko kopijo obstoječega objekta. V primerjavi z metodo clone() jo je lažje implementirati.

Opomba: Podrazredi ga ne morejo podedovati. Če poskušamo inicializirati objekt podrejenega razreda iz reference nadrejenega razreda, se pri kloniranju s konstruktorjem kopiranja soočimo s težavo ulitja.

Uporaba Konstruktorja kopiranja

Konstruktor kopiranja lahko uporabimo, če želimo:

  • Ustvarite kopijo predmeta, ki ima več polj.
  • Ustvari globoko kopijo težkih predmetov.
  • Izogibajte se uporabi metode Object.clone().

Prednosti Copy Constructorja

  • Če je polje deklarirano kot končno, ga lahko konstruktor kopiranja spremeni.
  • Ni potrebe po tipkanju.
  • Njegova uporaba je lažja, če ima objekt več polj.
  • Zaradi tega je dodajanje polja v razred enostavno. Spremeniti moramo le v konstruktorju kopiranja.

Ustvarjanje konstruktorja kopij

Če želite ustvariti konstruktor kopiranja v Javi, sledite spodnjim korakom:

  • Ustvarite konstruktor, ki sprejme objekt istega razreda kot parameter.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Kopirajte vsako polje (spremenljivko) v novo ustvarjeni primerek.
 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 } } 

Primer Konstruktorja kopiranja

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

Izhod:

 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 

Konstruktor proti metodi clone().

Tako konstruktor kopiranja kot metoda clone() se uporabljata za ustvarjanje kopije obstoječega predmeta razreda. Toda uporaba konstruktorja kopiranja je lažja in boljša v primerjavi z metodo clone() zaradi spodaj navedenih razlogov:

  • Če uporabljamo metodo clone(), je treba uvoziti Klonirati Metoda lahko povzroči izjemo CloneNotSupportException. Torej je obravnava izjeme v programu zapletena naloga. Medtem ko v konstruktorju kopiranja takšnih zapletov ni.
  • Ne moremo dodeliti vrednosti, če so polja dokončno . V konstruktorju kopiranja lahko končnim poljem dodelimo vrednosti.
  • Objekt, ki ga vrne metoda clone(), mora biti typecast . Medtem ko v konstruktorju kopiranja te zahteve ni.