logo

Пример за конструктор за копиране на Java

Като C++, Java също поддържа конструктор за копиране . Но в C++ той се създава по подразбиране. Докато в Java ние дефинираме наш собствен конструктор за копиране. В този раздел ще научим конструктор за копиране в Java с пример .

Конструктор

В Java, a конструктор е същото като метод, но единствената разлика е, че конструкторът има същото име като името на класа. Използва се за създаване на екземпляр на класа. Извиква се автоматично, когато създаваме обект от класа. Няма тип връщане. Не забравяйте, че конструктор не може да бъде абстрактно , финал , синхронизирани , и статичен . Не можем да отменим конструктор. Той заема малко място в паметта, когато бъде извикан.

безкраен цикъл

Видове конструктори

  • Конструктор по подразбиране
  • Параметризиран конструктор

С изключение на горните два конструктора, Java поддържа и конструктора за копиране. Нека го обсъдим подробно.

Защо е необходим конструктор за копиране?

Понякога се сблъскваме с проблем, при който трябва да създадем точно копие на съществуващ обект от класа. Има и условие, ако сме направили промени в копието, това да не се отразява в оригинала и обратното. За такива случаи Java предоставя концепцията за a конструктор за копиране .

Конструктор за копиране

В Java конструкторът за копиране е специален тип конструктор, който създава обект, използвайки друг обект от същия Java клас. Връща дублирано копие на съществуващ обект от класа.

Можем да присвоим стойност на крайното поле, но същото не може да бъде направено, докато използваме метода clone(). Използва се, ако искаме да създадем дълбоко копие на съществуващ обект. Той е по-лесен за прилагане в сравнение с метода clone().

Забележка: Не може да се наследи от подкласовете. Ако се опитаме да инициализираме обект на дъщерен клас от препратка към родителски клас, се сблъскваме с проблема с кастинга, когато го клонираме с конструктора за копиране.

Използване на Конструктор за копиране

Можем да използваме конструктора за копиране, ако искаме:

  • Създайте копие на обект, който има множество полета.
  • Генерирайте дълбоко копие на тежките предмети.
  • Избягвайте използването на метода Object.clone().

Предимства на Copy Constructor

  • Ако поле е декларирано като окончателно, конструкторът за копиране може да го промени.
  • Няма нужда от типизация.
  • Използването му е по-лесно, ако един обект има няколко полета.
  • Добавянето на поле към класа е лесно поради това. Трябва да променим само в конструктора за копиране.

Създаване на конструктор за копиране

За да създадете конструктор за копиране в Java, следвайте стъпките, дадени по-долу:

  • Създайте конструктор, който приема обект от същия клас като параметър.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Копирайте всяко поле (променлива) обект в новосъздадения екземпляр.
 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 } } 

Пример за конструктор за копиране

CopyConstructorExample.java

списък 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()); } } 

Изход:

 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 

Конструктор на копиране срещу метод clone().

Както конструкторът на копиране, така и методът clone() се използват за създаване на копие на съществуващ обект от класа. Но използването на конструктор за копиране е по-лесно и по-добро в сравнение с метода clone() поради причините, посочени по-долу:

  • Ако използваме метода clone(), е необходимо да импортираме Може да се клонира Методът може да предизвика изключение CloneNotSupportException. Така че обработката на изключението в програма е сложна задача. Докато в копиращия конструктор няма такива сложности.
  • Не можем да присвоим стойност, ако полетата са финал . Докато в конструктора за копиране можем да присвоим стойности на крайните полета.
  • Обектът, върнат от метода clone(), трябва да бъде typecast . Докато в копиращия конструктор няма такова изискване.