logo

Esimerkki Java Copy Constructorista

Kuten C++, Java tukee myös kopioinnin rakentaja . Mutta sisään C++ se luodaan oletuksena. Javassa määritämme kopiokonstruktorin omamme. Tässä osiossa opimme kopioi konstruktori Javassa esimerkin kanssa .

Rakentaja

Javassa a rakentaja on sama kuin metodi, mutta ainoa ero on, että rakentajalla on sama nimi kuin luokan nimellä. Sitä käytetään luomaan luokan esiintymä. Sitä kutsutaan automaattisesti, kun luomme luokan objektin. Sillä ei ole palautustyyppiä. Muista, että rakentaja ei voi olla abstrakti , lopullinen , synkronoitu , ja staattinen . Emme voi ohittaa rakentajaa. Se vie jonkin verran tilaa muistissa, kun sitä kutsutaan.

Rakentajan tyypit

  • Oletuskonstruktori
  • Parametrisoitu rakentaja

Lukuun ottamatta edellä mainittuja kahta rakentajaa, Java tukee myös kopiokonstruktoria. Keskustellaan siitä yksityiskohtaisesti.

Miksi kopiokonstruktori tarvitaan?

Joskus kohtaamme ongelman, jossa jouduimme luomaan tarkan kopion luokan olemassa olevasta objektista. Edellytyksenä on myös se, että jos olemme tehneet kopioon muutoksia, niiden ei pitäisi näkyä alkuperäisessä ja päinvastoin. Tällaisissa tapauksissa Java tarjoaa käsitteen a kopioinnin rakentaja .

Kopioi rakentaja

Javassa kopiokonstruktori on erityinen konstruktori, joka luo objektin käyttämällä toista saman Java-luokan objektia. Se palauttaa luokan olemassa olevan objektin kaksoiskappaleen.

Voimme antaa arvon lopulliselle kenttään, mutta samaa ei voida tehdä klone()-menetelmää käytettäessä. Sitä käytetään, jos haluamme luoda syväkopion olemassa olevasta objektista. Se on helpompi toteuttaa verrattuna klooni()-menetelmään.

Huomautus: Alaluokat eivät voi periä sitä. Jos yritämme alustaa aliluokan objektin yläluokkaviittauksesta, kohtaamme casting-ongelman kloonattaessa sitä kopiokonstruktorilla.

Copy Constructorin käyttö

Voimme käyttää kopiokonstruktoria, jos haluamme:

  • Luo kopio objektista, jossa on useita kenttiä.
  • Luo syvä kopio painavista esineistä.
  • Vältä Object.clone()-menetelmän käyttöä.

Copy Constructorin edut

  • Jos kenttä on ilmoitettu lopulliseksi, kopioinnin rakentaja voi muuttaa sitä.
  • Lajittelua ei tarvita.
  • Sen käyttö on helpompaa, jos objektilla on useita kenttiä.
  • Kentän lisääminen luokkaan on sen ansiosta helppoa. Meidän täytyy muuttaa vain kopiokonstruktorissa.

Kopiointikonstruktorin luominen

Voit luoda kopiokonstruktorin Javassa seuraavasti:

  • Luo konstruktori, joka hyväksyy parametriksi saman luokan objektin.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Kopioi jokainen kenttä (muuttuja) -objekti äskettäin luotuun ilmentymään.
 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 } } 

Esimerkki Copy Constructorista

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

Lähtö:

 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 

Copy Constructor Vs clone() -menetelmä

Sekä kopiokonstruktoria että clone()-menetelmää käytetään luomaan kopio luokan olemassa olevasta objektista. Mutta kopiokonstruktorin käyttö on helpompaa ja parempaa verrattuna clone()-menetelmään alla esitetyistä syistä:

  • Jos käytämme clone()-menetelmää, sinun on tuotava Kloonattavissa Menetelmä voi tehdä poikkeuksen CloneNotSupportException. Joten poikkeuksen käsitteleminen ohjelmassa on monimutkainen tehtävä. Kopiointikonstruktorissa ei ole tällaisia ​​monimutkaisia.
  • Emme voi määrittää arvoa, jos kentät ovat lopullinen . Kopiokonstruktorissa voimme määrittää arvoja lopullisiin kenttiin.
  • Clone()-metodin palauttaman objektin on oltava antaa jklle totuttu rooli . Kopiointikonstruktorissa tällaista vaatimusta ei ole.