Як C++, Java також підтримує конструктор копіювання . Але в C++ він створюється за замовчуванням. Хоча в Java ми визначаємо власний конструктор копіювання. У цьому розділі ми дізнаємося конструктор копіювання в Java з прикладом .
Конструктор
На Яві а конструктор те саме, що й метод, але єдина відмінність полягає в тому, що ім’я конструктора збігається з ім’ям класу. Він використовується для створення екземпляра класу. Він викликається автоматично, коли ми створюємо об'єкт класу. Він не має типу повернення. Пам'ятайте, що конструктором бути не може анотація , остаточний , синхронізовано , і статичний . Ми не можемо перевизначити конструктор. Під час виклику він займає деякий простір у пам’яті.
статична функція в java
Види конструктора
- Конструктор за замовчуванням
- Параметризований конструктор
За винятком двох вищезгаданих конструкторів, 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(), має бути приведення типу . Тоді як у конструкторі копіювання такої вимоги немає.