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.