logo

Príklad Java Copy Constructor

Ako C++, Java podporuje aj kopírovať konštruktor . Ale v C++ je štandardne vytvorený. Zatiaľ čo v Jave definujeme kopírovací konštruktor náš vlastný. V tejto časti sa naučíme kopírovať konštruktor v Jave s príkladom .

Konštruktér

V Jave, a konštruktér je rovnaký ako metóda, ale jediný rozdiel je v tom, že konštruktor má rovnaký názov ako názov triedy. Používa sa na vytvorenie inštancie triedy. Volá sa automaticky, keď vytvoríme objekt triedy. Nemá návratový typ. Pamätajte, že konštruktor nemôže byť abstraktné , Konečný , synchronizované , a statické . Nemôžeme prepísať konštruktor. Pri volaní zaberá určité miesto v pamäti.

Typy konštruktérov

  • Predvolený konštruktor
  • Parametrizovaný konštruktor

Okrem vyššie uvedených dvoch konštruktorov Java podporuje aj kopírovací konštruktor. Poďme si to podrobne rozobrať.

Prečo je potrebný konštruktor kopírovania?

Niekedy sa stretávame s problémom, keď sme potrebovali vytvoriť presnú kópiu existujúceho objektu triedy. Existuje aj podmienka, že ak sme v kópii urobili nejaké zmeny, nemalo by sa to prejaviť v origináli a naopak. Pre takéto prípady Java poskytuje koncept a kopírovať konštruktor .

Kopírovať konštruktor

V jazyku Java je konštruktor kópie špeciálnym typom konštruktora, ktorý vytvára objekt pomocou iného objektu rovnakej triedy Java. Vracia duplicitnú kópiu existujúceho objektu triedy.

Môžeme priradiť hodnotu konečnému poľu, ale to isté nemožno urobiť pri použití metódy clone(). Používa sa, ak chceme vytvoriť hĺbkovú kópiu existujúceho objektu. V porovnaní s metódou clone() je jej implementácia jednoduchšia.

Poznámka: Podtriedy ho nemôžu zdediť. Ak sa pokúsime inicializovať objekt podradenej triedy z odkazu nadradenej triedy, pri klonovaní pomocou konštruktora kopírovania čelíme problému s pretypovaním.

Použitie nástroja Copy Constructor

Konštruktor kopírovania môžeme použiť, ak chceme:

  • Vytvorte kópiu objektu, ktorý má viacero polí.
  • Vytvorte hlbokú kópiu ťažkých predmetov.
  • Vyhnite sa použitiu metódy Object.clone().

Výhody Copy Constructor

  • Ak je pole deklarované ako konečné, konštruktor kopírovania ho môže zmeniť.
  • Nie je potrebné pretypovanie.
  • Jeho použitie je jednoduchšie, ak má objekt viacero polí.
  • Pridanie poľa do triedy je vďaka tomu jednoduché. Potrebujeme zmeniť iba v konštruktore kopírovania.

Vytvorenie konštruktora kopírovania

Ak chcete vytvoriť konštruktor kópie v jazyku Java, postupujte podľa krokov uvedených nižšie:

reťazec v porovnaní s
  • Vytvorte konštruktor, ktorý akceptuje objekt rovnakej triedy ako parameter.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Skopírujte každý objekt poľa (premennej) do novovytvorenej inštancie.
 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 } } 

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

Výkon:

 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 

Metóda kopírovania konštruktora vs clone().

Na vytvorenie kópie existujúceho objektu triedy sa používa konštruktor kópie aj metóda clone(). Použitie konštruktora kopírovania je však jednoduchšie a lepšie v porovnaní s metódou clone() z dôvodov uvedených nižšie:

  • Ak používame metódu clone(), je potrebné importovať Klonovateľné Metóda môže vyvolať výnimku CloneNotSupportException. Takže spracovanie výnimky v programe je zložitá úloha. Zatiaľ čo v konštruktore kopírovania nie sú takéto zložitosti.
  • Ak polia sú, nemôžeme priradiť hodnotu Konečný . Zatiaľ čo v konštruktore kopírovania môžeme konečným poliam priradiť hodnoty.
  • Objekt vrátený metódou clone() musí byť typové obsadenie . Zatiaľ čo v konštruktore kopírovania takáto požiadavka neexistuje.