У попередній дискусії ми дізналися, як це зробити передають посилання на об'єкт до методу. Таким же чином ми можемо передати посилання на конструктор для ініціалізації змінних екземплярів іншого об'єкта того ж класу. Ви можете використовувати одне і те ж значення змінних екземплярів об'єкта, що надсилається конструктору. Один об’єкт копіюється на інші об’єкти. Давайте перевіримо цей конструктор копіювання підручника Java на мові Java.
Конструктор копіювання Java-підручника в Java
- Переваги використання Конструктора копіювання
- Недоліки використання Конструктора копіювання
- Програма для конструктора копіювання
- Пояснення Java-коду та виводу
Переваги використання Конструктора копіювання
Існує кілька випадків використання, коли конструктори копіювання добре працюють щодо інших конструкторів на Java.
Як ми знаємо, об’єкти можна клонувати в Java за допомогою методу clone (). Але копіювання об'єкта за допомогою clone () не є гнучким та розширюваним, також не працює добре.
Перша проблема полягає в тому відсутній виклик конструктора трапляється, коли об’єкт клонується. Як результат, ви, як письменник методу клонування, переконайтеся, що всі члени були встановлені належним чином. Ось приклад того, де все може піти не так.
Розглянемо клас, що відстежує загальну кількістькількість об'єктів цього типу, використовуючи статичний член int. У конструкторах ви б збільшили кількість. Однак якщо ви клонуєте об’єкт, оскільки жоден конструктор не викликається, підрахунок по-справжньому не відображатиме кількість об’єктів!
Далі, якщо клас має заключні поля, ціне можна присвоїти значення методу клонування. Це призводить до проблем із належною ініціалізацією останніх полів об'єкта. Якщо підсумкове поле посилається на якийсь внутрішній стан об'єкта, то клонований об’єкт закінчується спільним внутрішнім станом, і це, безумовно, не вірно для об'єктів, що змінюються.
Недоліки використання конструктора копіювання на Java
Оскільки один об'єкт - це репліка іншого, будь-якогоЗміна першого, це ненароком змінить значення змінних екземплярів інших. Тому ви повинні бути обережними і краще не оголошувати конструктор копій як загальнодоступний. Інакше під час спадкування це не задовольняє Принцип відкритого закриття (OCP). OCP, Бертран Мейєр, стверджує, що програмні об'єкти повинні бути відкритими для розширення, але закритими для модифікацій.
Програма для конструктора копіювання
class Employee{ String employeeName; String address; int age; double salary; /*Default Constructor */ Employee(){ employeeName = "Platini"; address = "France"; age = 45; salary = 120500.92; } /* Parameterized Constructor */ Employee(String empName,String addr,int ag,double sal){ employeeName = empName; address = addr; age = ag; salary = sal; } /* Copy Constructor */ Employee(Employee emp){ employeeName = emp.employeeName; address = emp.address; age = emp.age; salary = emp.salary; } void showDetails(){ System.out.println("Employee's Name: "+employeeName); System.out.println("Employee's Address: "+address); System.out.println("Employee's Age: "+age); System.out.println("Employee's Salary: "+salary); } } class ConstructorDemo{ public static void main(String args[]){ System.out.println("Employee Details"); System.out.println("----------------"); Employee employee1 = new Employee(); employee1.showDetails(); System.out.println("----------------"); String employeeName = "John"; String address = "Los Angles"; int age = 25; double salary = 34503.92; Employee employee2 = new Employee(employeeName,address,age,salary); employee2.showDetails(); System.out.println("----------------"); Employee employee3 = new Employee(); employee3.showDetails(); System.out.println("----------------"); Employee employee4 = new Employee(employee2); employee4.showDetails(); System.out.println("----------------"); Employee employee5 = new Employee(employee3); employee5.showDetails(); } }
Вихідні дані
Пояснення Java-коду та виводу
Будь ласка, уважно дотримуйтесь коду, позначеного червоним кольором,в основному в класі Співробітник ви знайдете синтаксис про те, як оголосити конструктор копій. Ми створили ще два об’єкти співробітник 4 та співробітник5, які є копією співробітника2 та службовця3 відповідно. З результатів видно, що змінні екземпляри співробітника4 мають те саме значення, що і значення змінних екземплярів співробітника2. Те саме стосується і працівника5.
Далі ми побачимо як використовувати ключове слово "статичний" на Java. Ознайомтеся з більш корисними підручниками та заключними вказівками щодо програмування Java тут.
Коментарі