logo

Java Copy Constructor példa

Mint a C++, Jáva is támogatja a másolat konstruktor . De C++ alapértelmezés szerint létrejön. Míg a Java-ban mi magunk határozzuk meg a copy konstruktort. Ebben a részben megtanuljuk a másoljon konstruktort Java nyelven egy példával .

Konstruktőr

Java nyelven a konstruktőr ugyanaz, mint egy metódus, de az egyetlen különbség az, hogy a konstruktor neve megegyezik az osztálynévvel. Az osztály példányának létrehozására szolgál. Ez automatikusan meghívódik, amikor létrehozzuk az osztály objektumát. Nincs visszatérési típusa. Ne feledje, hogy konstruktor nem lehet absztrakt , végső , szinkronizálva , és statikus . Nem írhatunk felül egy konstruktort. Ha hívják, elfoglal egy kis helyet a memóriában.

0,0625 törtként

A konstruktor típusai

  • Alapértelmezett konstruktor
  • Paraméterezett konstruktor

A fenti két konstruktor kivételével a Java a másolás konstruktort is támogatja. Beszéljük meg részletesen.

Miért van szükség másoláskonstruktorra?

Néha olyan problémával szembesülünk, amikor az osztály meglévő objektumának pontos másolatát kellett létrehoznunk. Van egy feltétel is, hogy ha a másolaton bármilyen változtatást végeztünk, az ne tükröződjön az eredetiben és fordítva. Ilyen esetekre a Java az a fogalmát biztosítja másolat konstruktor .

Copy Constructor

A Java nyelvben a másoláskonstruktor egy speciális konstruktor típus, amely egy objektumot hoz létre ugyanazon Java osztály másik objektumával. Az osztály meglévő objektumának másolatát adja vissza.

Hozzárendelhetünk értéket a végső mezőhöz, de ugyanez nem tehető meg a clone() metódus használatakor. Akkor használjuk, ha egy létező objektumról mély másolatot akarunk készíteni. Könnyebb megvalósítani a clone() metódushoz képest.

pandák szórása

Megjegyzés: Az alosztályok nem örökölhetik. Ha megpróbálunk inicializálni egy utódosztály-objektumot egy szülőosztály-hivatkozásból, akkor a másoláskonstruktorral történő klónozáskor casting problémával szembesülünk.

A Copy Constructor használata

Használhatjuk a másolás konstruktort, ha szeretnénk:

java véletlenszám generátor
  • Hozzon létre egy másolatot egy több mezőt tartalmazó objektumról.
  • Készítsen mély másolatot a nehéz tárgyakról.
  • Kerülje az Object.clone() metódus használatát.

A Copy Constructor előnyei

  • Ha egy mező véglegesnek van nyilvánítva, a másoláskonstruktor módosíthatja azt.
  • Nincs szükség gépírásra.
  • Használata egyszerűbb, ha egy objektum több mezővel rendelkezik.
  • Emiatt egyszerű a mező hozzáadása az osztályhoz. Csak a másoláskonstruktorban kell módosítanunk.

Másoláskonstruktor létrehozása

Másoláskonstruktor Java nyelven történő létrehozásához kövesse az alábbi lépéseket:

  • Hozzon létre egy konstruktort, amely elfogad egy azonos osztályú objektumot paraméterként.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Másoljon minden mező (változó) objektumot az újonnan létrehozott példányba.
 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 } } 

Példa a Copy Constructorra

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()); } } 

Kimenet:

 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() Method

Mind a copy konstruktor, mind a clone() metódus az osztály meglévő objektumának másolatának létrehozására szolgál. De a copy konstruktor használata egyszerűbb és jobb a clone() metódushoz képest az alábbi okok miatt:

  • Ha a clone() metódust használjuk, akkor importálni kell a Klónozható A módszer kivételt jelenthet CloneNotSupportException. Tehát a kivétel kezelése egy programban összetett feladat. Míg a copy konstruktorban nincsenek ilyen bonyolultságok.
  • Nem tudunk értéket hozzárendelni, ha a mezők vannak végső . Míg a másolás konstruktorban értékeket rendelhetünk a végső mezőkhöz.
  • A clone() metódus által visszaadott objektumnak a következőnek kell lennie betűöntő . Míg a copy konstruktorban nincs ilyen követelmény.