logo

Primjer konstruktora Java kopije

Kao C++, Java također podržava konstruktor kopiranja . Ali u C++ kreira se prema zadanim postavkama. Dok u Javi sami definiramo konstruktor kopiranja. U ovom odjeljku naučit ćemo kopirajte konstruktor u Javi s primjerom .

Konstruktor

U Javi, a konstruktor je isto što i metoda, ali jedina razlika je u tome što konstruktor ima isto ime kao ime klase. Koristi se za stvaranje instance klase. Poziva se automatski kada kreiramo objekt klase. Nema povratnu vrstu. Zapamtite da konstruktor ne može biti sažetak , konačni , sinkronizirano , i statički . Ne možemo nadjačati konstruktor. Zauzima nešto prostora u memoriji kada se pozove.

Vrste konstruktora

  • Zadani konstruktor
  • Parametrirani konstruktor

Osim gore navedena dva konstruktora, Java također podržava konstruktor kopiranja. Raspravljajmo o tome detaljno.

Zašto je potreban konstruktor kopiranja?

Ponekad se susrećemo s problemom u kojem smo morali stvoriti točnu kopiju postojećeg objekta klase. Postoji i uvjet, ako smo napravili bilo kakve izmjene u kopiji, to se ne smije odraziti na original i obrnuto. Za takve slučajeve Java nudi koncept a konstruktor kopiranja .

Konstruktor kopiranja

U Javi, konstruktor kopije je posebna vrsta konstruktora koji stvara objekt pomoću drugog objekta iste Java klase. Vraća duplikat postojećeg objekta klase.

Možemo dodijeliti vrijednost konačnom polju, ali isto se ne može učiniti dok se koristi metoda clone(). Koristi se ako želimo stvoriti duboku kopiju postojećeg objekta. Lakše ju je implementirati u usporedbi s metodom clone().

Napomena: Podklase ga ne mogu naslijediti. Ako pokušamo inicijalizirati objekt podređene klase iz reference nadređene klase, suočavamo se s problemom kastinga kada ga kloniramo s konstruktorom kopiranja.

Korištenje Konstruktora kopiranja

Konstruktor kopiranja možemo koristiti ako želimo:

  • Napravite kopiju objekta koji ima više polja.
  • Generirajte duboku kopiju teških predmeta.
  • Izbjegavajte korištenje metode Object.clone().

Prednosti Copy Constructora

  • Ako je polje deklarirano kao konačno, konstruktor kopiranja ga može promijeniti.
  • Nema potrebe za tipiziranjem.
  • Njegovo korištenje je lakše ako objekt ima više polja.
  • Dodavanje polja u klasu je jednostavno zbog toga. Moramo promijeniti samo u konstruktoru kopiranja.

Stvaranje konstruktora kopije

Za izradu konstruktora kopiranja u Javi slijedite dolje navedene korake:

  • Napravite konstruktor koji prihvaća objekt iste klase kao parametar.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Kopirajte svaki objekt polja (varijable) u novostvorenu instancu.
 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 } } 

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

Izlaz:

 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 vs metoda clone().

I konstruktor kopiranja i metoda clone() koriste se za stvaranje kopije postojećeg objekta klase. Ali korištenje konstruktora kopiranja je lakše i bolje u usporedbi s metodom clone() zbog razloga navedenih u nastavku:

  • Ako koristimo metodu clone(), potrebno je uvesti Može se klonirati Metoda može izbaciti iznimku CloneNotSupportException. Dakle, rukovanje iznimkom u programu je složen zadatak. Dok u konstruktoru kopiranja nema takvih složenosti.
  • Ne možemo dodijeliti vrijednost ako su polja konačni . Dok smo u konstruktoru kopiranja možemo dodijeliti vrijednosti konačnim poljima.
  • Objekt koji vraća metoda clone() mora biti tipiziranje . Dok u konstruktoru kopiranja nema takvog zahtjeva.