Tāpat kā C++, Java atbalsta arī kopiju konstruktors . Bet iekšā C++ tas ir izveidots pēc noklusējuma. Programmā Java mēs paši definējam kopēšanas konstruktoru. Šajā sadaļā mēs uzzināsim, kopēt konstruktoru Java ar piemēru .
Konstruktors
Java valodā a konstruktors ir tāda pati kā metode, taču vienīgā atšķirība ir tā, ka konstruktoram ir tāds pats nosaukums kā klases nosaukumam. To izmanto, lai izveidotu klases gadījumu. Tas tiek izsaukts automātiski, kad mēs izveidojam klases objektu. Tam nav atgriešanas veida. Atcerieties, ka konstruktors nevar būt abstrakts , galīgais , sinhronizēts , un statisks . Mēs nevaram ignorēt konstruktoru. Kad tas tiek izsaukts, tas aizņem kādu vietu atmiņā.
Konstruktoru veidi
- Noklusējuma konstruktors
- Parametrizēts konstruktors
Izņemot divus iepriekš minētos konstruktorus, Java atbalsta arī kopēšanas konstruktoru. Apspriedīsim to sīkāk.
Kāpēc ir nepieciešams kopēšanas konstruktors?
Dažreiz mēs saskaramies ar problēmu, kad mums bija jāizveido precīza esošā klases objekta kopija. Ir arī nosacījums, ja esam veikuši kādas izmaiņas kopijā, tām nevajadzētu atspoguļoties oriģinālajā un otrādi. Šādos gadījumos Java nodrošina jēdzienu a kopiju konstruktors .
Kopēšanas konstruktors
Java valodā kopiju konstruktors ir īpašs konstruktora veids, kas izveido objektu, izmantojot citu tās pašas Java klases objektu. Tas atgriež esoša klases objekta dublikātu.
Mēs varam piešķirt vērtību galīgajam laukam, bet to nevar izdarīt, izmantojot klona () metodi. To izmanto, ja vēlamies izveidot dziļu esoša objekta kopiju. To ir vieglāk ieviest, salīdzinot ar klona() metodi.
Piezīme. To nevar mantot apakšklases. Ja mēģinām inicializēt bērnklases objektu no vecākklases atsauces, mēs saskaramies ar apraides problēmu, klonējot to ar kopiju konstruktoru.
Kopēšanas konstruktora izmantošana
Mēs varam izmantot kopēšanas konstruktoru, ja vēlamies:
- Izveidojiet tāda objekta kopiju, kuram ir vairāki lauki.
- Izveidojiet dziļu smago priekšmetu kopiju.
- Izvairieties no metodes Object.clone() izmantošanas.
Copy Constructor priekšrocības
- Ja lauks ir deklarēts kā galīgs, kopijas konstruktors var to mainīt.
- Nav nepieciešams veikt rakstīšanu.
- Tā lietošana ir vienkāršāka, ja objektam ir vairāki lauki.
- Tā dēļ lauka pievienošana klasei ir vienkārša. Mums ir jāmaina tikai kopiju konstruktors.
Kopēšanas konstruktora izveide
Lai izveidotu kopiju konstruktoru Java, veiciet tālāk norādītās darbības.
- Izveidojiet konstruktoru, kas pieņem tās pašas klases objektu kā parametru.
public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } }
- Kopējiet katru lauka (mainīgo) objektu jaunizveidotajā instancē.
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 } }
Kopēšanas konstruktora piemērs
CopyConstructorExample.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()); } }
Izvade:
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
Copy Constructor vs clone() metode
Lai izveidotu klases esoša objekta kopiju, tiek izmantots gan kopiju konstruktors, gan klona() metode. Taču kopiju konstruktora izmantošana ir vienkāršāka un labāka salīdzinājumā ar klona () metodi tālāk norādīto iemeslu dēļ:
- Ja mēs izmantojam klona () metodi, ir nepieciešams importēt Klonējams Metode var radīt izņēmumu CloneNotSupportException. Tātad izņēmuma apstrāde programmā ir sarežģīts uzdevums. Kamēr kopēšanas konstruktorā šādas sarežģītības nav.
- Mēs nevaram piešķirt vērtību, ja lauki ir galīgais . Atrodoties kopēšanas konstruktorā, mēs varam piešķirt vērtības galīgajiem laukiem.
- Ar metodi clone() atgrieztajam objektam ir jābūt tipogrāfija . Kopēšanas konstruktorā šādas prasības nav.