Come il C++, Giava supporta anche il costruttore di copie . Ma in C++ viene creato per impostazione predefinita. Mentre in Java definiamo il nostro costruttore di copie. In questa sezione impareremo il copia il costruttore in Java con un esempio .
Costruttore
A Giava, a costruttore è uguale a un metodo ma l'unica differenza è che il costruttore ha lo stesso nome del nome della classe. Viene utilizzato per creare un'istanza della classe. Viene chiamato automaticamente quando creiamo un oggetto della classe. Non ha un tipo di reso. Ricorda che un costruttore non può esserlo astratto , finale , sincronizzato , E statico . Non possiamo sovrascrivere un costruttore. Occupa uno spazio in memoria quando viene chiamato.
prepararsi per il test mockito
Tipi di costruttore
- Costruttore predefinito
- Costruttore parametrizzato
Ad eccezione dei due costruttori precedenti, Java supporta anche il costruttore di copia. Discutiamolo in dettaglio.
Perché è necessario copiare il costruttore?
A volte, ci troviamo di fronte a un problema in cui dobbiamo creare una copia esatta di un oggetto esistente della classe. C'è anche una condizione: se abbiamo apportato modifiche alla copia, queste non dovrebbero riflettersi nell'originale e viceversa. Per questi casi, Java fornisce il concetto di a copia costruttore .
Copia costruttore
In Java, un costruttore di copie è un tipo speciale di costruttore che crea un oggetto utilizzando un altro oggetto della stessa classe Java. Restituisce una copia duplicata di un oggetto esistente della classe.
Possiamo assegnare un valore al campo finale ma lo stesso non può essere fatto utilizzando il metodo clone(). Viene utilizzato se vogliamo creare una copia profonda di un oggetto esistente. È più semplice da implementare rispetto al metodo clone().
Nota: non può essere ereditato dalle sottoclassi. Se proviamo a inizializzare un oggetto di classe figlia da un riferimento alla classe genitore, affrontiamo il problema del casting quando lo cloniamo con il costruttore di copia.
Utilizzo del costruttore di copia
Possiamo usare il costruttore di copia se vogliamo:
- Crea una copia di un oggetto con più campi.
- Genera una copia profonda degli oggetti pesanti.
- Evitare l'uso del metodo Object.clone().
Vantaggi di Copia Costruttore
- Se un campo è dichiarato finale, il costruttore della copia può modificarlo.
- Non è necessario effettuare la typecasting.
- Il suo utilizzo è più semplice se un oggetto ha più campi.
- Per questo motivo l'aggiunta di un campo alla classe è semplice. Dobbiamo modificare solo nel costruttore della copia.
Creazione di un costruttore di copia
Per creare un costruttore di copia in Java, seguire i passaggi indicati di seguito:
- Crea un costruttore che accetta un oggetto della stessa classe come parametro.
public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } }
- Copia ciascun oggetto campo (variabile) nell'istanza appena creata.
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 } }
Esempio di costruttore di copie
CopyConstructorExample.java
numeri romani da 1 a 100
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()); } }
Produzione:
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
Metodo Copia costruttore Vs clone()
Sia il costruttore di copie che il metodo clone() vengono utilizzati per creare una copia di un oggetto esistente della classe. Ma l'uso del costruttore di copie è più semplice e migliore rispetto al metodo clone() per i motivi indicati di seguito:
- Se stiamo utilizzando il metodo clone() è necessario importare il file Clonabile Il metodo può generare l'eccezione CloneNotSupportException. Pertanto, gestire l'eccezione in un programma è un compito complesso. Mentre nel costruttore di copie non ci sono tali complessità.
- Non possiamo assegnare un valore se i campi lo sono finale . Mentre nel costruttore di copie possiamo assegnare valori ai campi finali.
- L'oggetto restituito dal metodo clone() deve essere typecast . Mentre nel costruttore di copie non esiste tale requisito.