W naszej poprzedniej dyskusji dowiedzieliśmy się, jak to zrobić przekazać odwołanie do obiektu do metody. W ten sam sposób możemy przekazać odwołanie do konstruktora, aby zainicjować zmienne instancji innego obiektu tej samej klasy. Możesz użyć tej samej wartości zmiennych instancji obiektu, które są wysyłane do konstruktora. Jeden obiekt jest kopiowany do innych obiektów. Sprawdźmy ten samouczek Java Copy Constructor w języku Java.
Java Tutorial Copy Constructor w Javie
- Zalety korzystania z Copy Constructor
- Wady korzystania z Copy Constructor
- Program do kopiowania konstruktora
- Objaśnienie kodu Java i wyników
Zalety korzystania z Copy Constructor
Istnieje kilka przypadków użycia, w których Copy Constructors działa dobrze w stosunku do innych konstruktorów w Javie.
Jak wiemy, obiekty można klonować w Javie za pomocą metody clone (). Ale kopiowanie obiektu za pomocą clone () nie jest elastyczne i rozszerzalne, również nie działa dobrze.
Pierwszy problem to taki brak wywołania konstruktora dzieje się, gdy obiekt jest klonowany. W rezultacie, jako autor metody klonowania, Twoim obowiązkiem jest upewnienie się, że wszyscy członkowie zostali odpowiednio ustawieni. Oto przykład, gdzie coś może pójść nie tak.
Rozważ klasę, która śledzi sumęliczba obiektów tego typu, przy użyciu statycznego elementu int. W konstruktorach zwiększysz liczbę. Jeśli jednak sklonujesz obiekt, ponieważ nie zostanie wywołany żaden konstruktor, liczba nie będzie odzwierciedlać liczby obiektów!
Ponadto, jeśli klasa ma pola końcowe, to tenie można podać wartości w metodzie klonowania. Prowadzi to do problemów z prawidłową inicjalizacją ostatnich pól obiektu. Jeśli ostatnie pole odnosi się do jakiegoś wewnętrznego stanu obiektu, wówczas sklonowany obiekt kończy współużytkowanie stanu wewnętrznego, a to z pewnością nie jest poprawne dla obiektów zmiennych.
Wady używania Copy Constructor w Javie
Ponieważ jeden obiekt jest repliką innego, każdyzmiana w pierwszej nieumyślnie zmieni wartości zmiennych instancji innych. Musisz więc uważać i lepiej nie ogłaszać konstruktora kopii jako publicznego. W przeciwnym razie podczas dziedziczenia nie spełnia Zasada otwarta-zamknięta (OCP). OCP, autorstwa Bertranda Meyera, stwierdza, że jednostki oprogramowania powinny być otwarte na rozszerzenie, ale zamknięte na modyfikacje.
Program do kopiowania konstruktora
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(); } }
Wynik
Objaśnienie kodu Java i wyników
Proszę uważnie przestrzegać kodu oznaczonego na czerwono,w zasadzie w klasie Employee znajdziesz składnię dotyczącą sposobu deklarowania konstruktora kopiowania. Stworzyliśmy dwa kolejne obiekty: pracownik 4 i pracownik5, które są odpowiednio kopią odpowiednio pracownika2 i pracownika3. Z danych wyjściowych widać, że zmienne instancji pracownika4 mają tę samą wartość, co wartości zmiennych instancji pracownika2. To samo dotyczy pracownika5.
Następnie zobaczymy jak używać słowa kluczowego „static” w Javie. Zapoznaj się z bardziej przydatnymi samouczkami i ostatecznymi wytycznymi dotyczącymi programowania w języku Java tutaj.
Komentarze