logo

Příklad Java Copy Constructor

Jako C++, Jáva také podporuje kopírovací konstruktor . Ale v C++ je vytvořen ve výchozím nastavení. Zatímco v Javě definujeme kopírovací konstruktor vlastní. V této části se naučíme kopírovat konstruktor v Javě s příkladem .

Konstruktér

V Javě, a konstruktér je stejný jako metoda, ale jediný rozdíl je v tom, že konstruktor má stejný název jako název třídy. Používá se k vytvoření instance třídy. Volá se automaticky, když vytvoříme objekt třídy. Nemá žádný návratový typ. Pamatujte, že konstruktor nemůže být abstraktní , finále , synchronizované , a statický . Nemůžeme přepsat konstruktor. Při volání zabírá určité místo v paměti.

Typy konstruktorů

  • Výchozí konstruktor
  • Parametrizovaný konstruktor

Kromě výše uvedených dvou konstruktorů podporuje Java také konstruktor kopírování. Pojďme to probrat podrobně.

Proč je vyžadován kopírovací konstruktor?

Někdy čelíme problému, kdy jsme museli vytvořit přesnou kopii existujícího objektu třídy. Existuje také podmínka, že pokud jsme provedli nějaké změny v kopii, nemělo by se to projevit v originále a naopak. Pro takové případy Java poskytuje koncept a kopírovací konstruktor .

Kopírovat konstruktor

V Javě je kopírovací konstruktor speciální typ konstruktoru, který vytváří objekt pomocí jiného objektu stejné třídy Java. Vrátí duplicitní kopii existujícího objektu třídy.

Můžeme přiřadit hodnotu konečnému poli, ale totéž nelze provést při použití metody clone(). Používá se, pokud chceme vytvořit hlubokou kopii existujícího objektu. Ve srovnání s metodou clone() je její implementace snazší.

Poznámka: Nemůže být zděděn podtřídami. Pokud se pokusíme inicializovat podřízený objekt třídy z odkazu nadřazené třídy, čelíme problému s přetypováním při jeho klonování pomocí konstruktoru kopírování.

Použití Copy Constructor

Kopírovací konstruktor můžeme použít, pokud chceme:

  • Vytvořte kopii objektu, který má více polí.
  • Vytvořte hlubokou kopii těžkých předmětů.
  • Vyhněte se použití metody Object.clone().

Výhody Copy Constructoru

  • Pokud je pole deklarováno jako konečné, konstruktor kopírování jej může změnit.
  • Není potřeba přetypování.
  • Jeho použití je jednodušší, pokud má objekt několik polí.
  • Přidání pole do třídy je díky tomu snadné. Musíme změnit pouze v konstruktoru kopírování.

Vytvoření konstruktoru kopírování

Chcete-li vytvořit konstruktor kopírování v Javě, postupujte podle následujících kroků:

  • Vytvořte konstruktor, který přijímá objekt stejné třídy jako parametr.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Zkopírujte každý objekt pole (proměnné) do nově vytvořené instance.
 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 } } 

Pří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ýstup:

 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 

Metoda kopírování konstruktoru vs clone().

Jak konstruktor kopírování, tak metoda clone() se používají k vytvoření kopie existujícího objektu třídy. Použití konstruktoru kopírování je však jednodušší a lepší ve srovnání s metodou clone() z důvodů uvedených níže:

  • Pokud používáme metodu clone(), je nutné importovat Klonovatelné Metoda může vyvolat výjimku CloneNotSupportException. Zpracování výjimky v programu je tedy složitý úkol. Zatímco v konstruktoru kopírování nejsou žádné takové složitosti.
  • Nemůžeme přiřadit hodnotu, pokud jsou pole finále . Zatímco v konstruktoru kopírování můžeme konečným polím přiřadit hodnoty.
  • Objekt vrácený metodou clone() musí být typové obsazení . Zatímco v konstruktoru kopírování takový požadavek neexistuje.