Kopiuj konstruktor w Javie

Kopiuj konstruktor w Javie
Konstruktor kopii Java pozwala nam wygenerować dokładny klon istniejącego obiektu, który należy do tej samej klasy bez nowej kopii, dotkniętej zmianami w oryginalnym obiekcie. Korzystając z konstruktora kopii, ulepszona jest ponowne użycie kodu. Jego rozmiar jest zmniejszony, a typecasting nie jest wymagany. Możemy w pełni kontrolować tworzenie obiektów za pomocą konstruktora kopii. Dodatkowo kompilator Java nie tworzy żadnych konstruktorów kopii w klasie domyślnie. Możemy jednak to ustalić, przypisując treść obiektu do innej.

Przykład 1:

Przed przystąpieniem do demonstracji konstruktora kopiowania mamy działanie domyślnego konstruktora w Javie. Domyślne konstruktory to konstruktory, które nie przyjmują parametrów. Miejmy domyślny program konstruktora w następujący sposób:

Klasa publiczna DefaultConst

DefaultConst ()

System.na zewnątrz.println („Konstruktor wywołany, ponieważ obiekt jest tworzony”);

public static void main (string args [])

DefaultConst d = new defaultConst ();

Definiujemy program, który zaczyna się od budowy klasy Java „DefaultConst”. Klasa „DefaultConst” jest dalej zdefiniowana z konstruktorem, który jest zatytułowany taki sam, jak nazwa klasy Java. Tutaj tworzymy ten konstruktor, który jest pusty, ale zawiera instrukcję drukowania wewnątrz bloku konstruktora. Następnie wdrażamy metodę klasy main (), w której wywoływana jest ta klasa. W tym celu deklarujemy obiekt „d” i stosujemy tam defaultConst (). Stamtąd wykonywane jest DefaultConst ().

Domyślny konstruktor nie podał parametru, ale instrukcja drukowania jest wykonywana przez utworzenie jego obiektu w metodzie Main ().

Przykład 2:

Demonstracja konstruktora odbywa się w poprzednim przykładzie. Teraz istnieje przykładowy konstruktor kopii. Konstruktorzy kopii Java przyjmują bieżący obiekt jako wejście i tworzą kopię zdefiniowanego obiektu.

klasa ComplexNumber
Prywatny podwójny prawdziwy, IMG;
Public ComplexNumber (podwójny rzeczywistość, podwójne IMG)

Ten.Real = real;
Ten.img = img;

ComplexNumber (ComplexNumbercn)

System.na zewnątrz.println („Inside a Copy Constructor”);
Real = cn.prawdziwy;
img = cn.img;

@Override Public String ToString ()

return "(" + real + " +" + img + "i)";


Klasa publiczna Main
public static void main (string [] args)

ComplexNumber cn1 = new ComplexNumber (3, 9);
ComplexNumber cn2 = new ComplexNumber (CN1);
ComplexNumber CN3 = CN2;
System.na zewnątrz.println (CN2);

Mamy poprzedni program, w którym tworzymy klasę „ComplexNumber” Java. Klasa „ComplexNumber” zawiera atrybuty deklarowane jako „prawdziwe” i „IMG”. Następnie definiujemy konstruktor w klasie „ComplexNumber”, w której atrybuty klasowe są przekazywane jako argumenty. Następnie używamy słowa kluczowego „to” w odniesieniu do bieżących obiektów, „prawdziwych” i „img”. Następnie stosujemy konstruktor kopii „ComplexNumber ()”, który ma parametryczny obiekt „CN” klasy „ComplexNumber”. Konstruktor jest zadeklarowany za pomocą obiektów klasy. Wartości zmiennych instancji są inicjowane z wartościami z otrzymanego obiektu.

Następnie wykonujemy operację zastępowania toString () na obiektach klasowych „prawdziwych” i „img”. Klasa główna „ComplexNumber” jest zaimplementowana metodą Main (). Tutaj tworzymy obiekt „CN1”, aby wywołać klasę ComplexNumber (). Ustawiamy wartości dla zmiennych „prawdziwych” i „img” w klasie ComplexNumber (). Następnie deklarujemy obiekt „CN2”, w którym konstruktor kopii jest zaangażowany, ponieważ „CN2” jest przekazywany w nim. Następnie deklarujemy inny obiekt „CN3”, aby odwołać się do obiektu „CN2”. Ostatecznie nazywamy metodą TOString () obiektu „CN2”, aby wydrukować wartości.

Złożona liczba wartości rzeczywistych i wyobrażonych zarówno dla istniejącego obiektu, jak i skopiowanego obiektu jest taka sama. Konstruktor kopii nie wpływa na pierwotną datę obiektów.

Przykład 3:

Konstruktor kopii służy tylko do utworzenia zduplikowanej kopii istniejących zmiennych klasy klasy. Teraz konstruktor kopii jest tworzony dla klas typów odwołanych. Za pośrednictwem konstruktora kopii możemy dodać atrybuty jednej klasy do innej klasy.

Pracownik klasy

prywatny ciąg EName;
prywatna podwójna esalary;
Adres prywatny EADDRESS;
Pracownik (ciąg Ename, podwójny esalary, adres EADD)

Ten.ename = ename;
Ten.esalary = esalary;
Ten.eaddress = eadd;

Pracownik (pracownik EMP)

Ten.ename = emp.getename ();
Ten.esalary = emp.guinesalary ();
Ten.eaddress = emp.geteaddress ();

Adres publiczny geteaddress ()
Zwrot EADDRESS;

public void setEddress (adres eaddress)
Ten.eaddress = eaddress;

public String getename ()
return ename;

public void setEname (String ename)
Ten.ename = ename;

public Double GEGESALARY ()
zwrócić esalary;

public void setesalary (double esalary)
Ten.esalary = esalary;


adres klasy

Int PostCode;
Adres (int EMP)

Ten.PostCode = emp;


Klasa publiczna Main

public static void main (string [] args)

Adres eadd = nowy adres (100002);
Pracownik EMP1 = nowy pracownik („Bella”, 85000.0, eadd);
Pracownik cloneofemp1 = nowy pracownik (EMP1);
eadd.kod postCode = 200003;
System.na zewnątrz.println („pracownik-1:” + emp1.geteaddress ().kod pocztowy);
System.na zewnątrz.Drukuj („pracownik-2:” + cloneofemp1.geteaddress ().kod pocztowy);

Program jest ustanowiony w klasie „pracownika” Java i ustawiamy prywatne atrybuty klasy. Atrybuty te obejmują Ename String, Esalary podwójny i adres. Następnie konstruujemy sparametryzowany konstruktor klasy „pracownika”, który przyjmuje istniejące atrybuty klasy jako obiekty parametrów. W sparametryzowanym konstruktorze nazywamy ke słowo kluczowe K, które odwołuje się bezpośrednio do bieżącej instancji.

Następnie definiujemy konstruktor kopii, który przyjmuje parametr „emp”, aby odwołać się do obiektu klasy „pracownik”. Określamy metody gettera dla każdego z obiektów. Następnie nazywamy każdą metody Gettera i metod Setter, które kontrolują wartość w stosunku do każdego obiektu referencyjnego klasy. Następnie tworzymy drugą klasę programu, która jest „adresem”, który ma członek „kodu pocztowego”. Również definiujemy konstruktor kopii wewnątrz klasy, który przyjmuje odniesienie do obiektu klasy pracowników „EMP” typu int. Obiekt kodu pocztowego klasy „Adres” jest ustawiony z obiektem „EMP”.

Teraz obiekt „EMP” klasy pracownika i obiekt „Kod pocztowy” Klasa adresu Podaj te same dane. Następnie mamy klasę „główną”, w której metoda main () jest wdrażana, aby przypisać wartości do podanych atrybutów i wykonać je. Nazywamy klasę adresu () w obiekcie „EADD” i ustawiamy na nią wartość EADDress. W obiekcie „EMP” wartości dla innych dziedzin klasy pracownika są również inicjowane. Ponadto deklarujemy obiekt referencyjny „cloneofemp1”, który wskazuje na obiekt „EMP1”, który jest generowany przez nowe słowo kluczowe o nazwie „Pracownik”, który używa konstruktora kopii do kopiowania danych z pierwszego obiektu z pierwszego obiektu.

Następnie zmieniamy wartość adresu, który wpływa również na obiekt klonu „EADD”. Instrukcja drukowania wyświetla wyniki zmiany wartości obiektu klonu.

Adres obiektu konstruktora kopiowania jest modyfikowany, który jest wyświetlany na monicie Java:

Przykład 4:

Kopiowany obiekt można również utworzyć bez konstruktora kopii, po prostu podając zawartość jednego obiektu drugiego. Klonujmy obiekty klasowe bez korzystania z konstruktora kopii.

Importuj Java.Util.Skaner;
produkt klasy publicznej
public int pid;
Publiczna cena float;
pname string publiczny;
produkt publiczny ()
produkt publiczny (int id, string pname, float cena)
Ten.PID = PID;
Ten.pname = pname;
Ten.cena = cena;

public void productView ()
System.na zewnątrz.println („identyfikator produktu:” + to.pid);
System.na zewnątrz.println („nazwa produktu:” + to.pname);
System.na zewnątrz.println („Cena produktu:” + to.cena);

public static void main (string [] args)
Skanner myScan = nowy skaner (system.W);
System.na zewnątrz.println („wprowadź nazwę produktu”);
String pname = mycan.Następny();
System.na zewnątrz.println („Wprowadź identyfikator produktu”);
int pid = mycan.NextIt ();
System.na zewnątrz.println („Wprowadź cenę produktu”);
int cena = mycan.NextIt ();
Produkt produktu = nowy produkt (PID, pname, cena);
System.na zewnątrz.println („dane oryginalnego obiektu”);
produkt.ProductView ();
Produkt produkt_copy = nowy produkt ();
produkt_copy.PID = produkt.pid;
produkt_copy.cena = produkt.cena;
produkt_copy.pname = produkt.pname;
System.na zewnątrz.println („Dane z skopiowanego obiektu”);
produkt.ProductView ();

Program jest zdefiniowany w klasie publicznej „produktu”, w której deklarujemy jego obiekty, które są PID, PNAME i PPRICE innego typu. Następnie tworzymy konstruktor dla określonej klasy bez żadnych argumentów. Następnie tworzymy sparametryzowany konstruktor klasy, w której wszystkie atrybuty klasy są zadeklarowane jako argument. Wewnątrz konstruktora klasy używamy zmiennej odniesienia „ta” z atrybutami klasy, która odnosi się do aktualnego obiektu konstruktora.

Następnie mamy definicję funkcji „ProductView” klasy „Produkt”, aby wyświetlić lub wydrukować wartości każdego z atrybutów klasowych. Następnie stosujemy metodę main (), w której używamy klasy skanera, aby uzyskać wartości dla atrybutów klasy „produktu”, aby utworzyć użytkownika. Gdy użytkownik wprowadzi wartość atrybutu, oryginalne wartości dla instancji klasowej są wyświetlane z funkcji ProductView (). Następnie tworzymy obiekt „produkt_copy”, w którym wywołujemy klasę „produkt ()”. Teraz produkt_copy ma zawartość klasy produktów. Kopiujemy więc atrybuty klasy „produkt” z nowymi obiektami produktu_copy. Zarówno atrybuty klasowe, jak i atrybut produktu_copy utrzymują te same wartości.

Wartości oryginalnego obiektu i skopiowanego obiektu są takie same bez użycia konstruktora kopii.

Wniosek

Konstruktory kopii Java są wydajnym i prostym sposobem na powielanie obiektów. Mogą tworzyć zarówno płytkie, jak i głębokie klony. Podaliśmy program wykonywalny konstruktorów kopii, w których realizowane są różne scenariusze. Ponadto konstruktorzy kopii mają wadę dziedziczenia. Ale możemy obejść tę trudność, włączając metodę, która uruchamia konstruktor kopii w klasach podstawowych i pochodnych.