Comme le C++, Java soutient également le constructeur de copie . Mais en C++ il est créé par défaut. En Java, nous définissons notre propre constructeur de copie. Dans cette section, nous apprendrons le constructeur de copie en Java avec un exemple .
Constructeur
En Java, un constructeur est identique à une méthode mais la seule différence est que le constructeur a le même nom que le nom de la classe. Il est utilisé pour créer une instance de la classe. Il est appelé automatiquement lorsque l'on crée un objet de la classe. Il n'a pas de type de retour. N'oubliez pas qu'un constructeur ne peut pas être abstrait , final , synchronisé , et statique . Nous ne pouvons pas remplacer un constructeur. Il occupe de l'espace en mémoire lorsqu'il est appelé.
Types de constructeur
- Constructeur par défaut
- Constructeur paramétré
À l'exception des deux constructeurs ci-dessus, Java prend également en charge le constructeur de copie. Discutons-en en détail.
Pourquoi le constructeur de copie est requis ?
Parfois, nous sommes confrontés à un problème où nous devons créer une copie exacte d’un objet existant de la classe. Il y a aussi une condition : si nous avons apporté des modifications à la copie, cela ne doit pas se refléter dans l'original et vice versa. Pour de tels cas, Java propose le concept d'un constructeur de copie .
méthode tostring en java
Copier le constructeur
En Java, un constructeur de copie est un type spécial de constructeur qui crée un objet en utilisant un autre objet de la même classe Java. Il renvoie une copie d'un objet existant de la classe.
Nous pouvons attribuer une valeur au champ final mais la même chose ne peut pas être faite en utilisant la méthode clone(). Il est utilisé si nous voulons créer une copie complète d'un objet existant. Elle est plus facile à implémenter que la méthode clone().
Remarque : Il ne peut pas être hérité par les sous-classes. Si nous essayons d'initialiser un objet de classe enfant à partir d'une référence de classe parent, nous sommes confrontés au problème de conversion lors de son clonage avec le constructeur de copie.
Utilisation du constructeur de copie
Nous pouvons utiliser le constructeur de copie si nous voulons :
- Créez une copie d'un objet comportant plusieurs champs.
- Générez une copie complète des objets lourds.
- Évitez d'utiliser la méthode Object.clone().
Avantages du constructeur de copie
- Si un champ est déclaré final, le constructeur de copie peut le modifier.
- Il n’est pas nécessaire de transtyper.
- Son utilisation est plus simple si un objet possède plusieurs champs.
- L'ajout d'un champ à la classe est facile grâce à cela. Nous devons changer uniquement dans le constructeur de copie.
Création d'un constructeur de copie
Pour créer un constructeur de copie en Java, suivez les étapes ci-dessous :
- Créez un constructeur qui accepte un objet de la même classe comme paramètre.
public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } }
- Copiez chaque objet de champ (variable) dans l'instance nouvellement créée.
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 } }
Exemple de constructeur de copie
CopierConstructorExample.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()); } }
Sortir:
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
Copier le constructeur contre la méthode clone()
Le constructeur de copie et la méthode clone() sont utilisés pour créer une copie d'un objet existant de la classe. Mais l'utilisation du constructeur de copie est plus facile et meilleure par rapport à la méthode clone() pour les raisons indiquées ci-dessous :
- Si nous utilisons la méthode clone(), il est nécessaire d'importer le Clonable La méthode peut lever l'exception CloneNotSupportException. Ainsi, gérer l’exception dans un programme est une tâche complexe. Dans le constructeur de copie, de telles complexités n'existent pas.
- Nous ne pouvons pas attribuer de valeur si les champs sont final . Dans le constructeur de copie, nous pouvons attribuer des valeurs aux champs finaux.
- L'objet renvoyé par la méthode clone() doit être transtypage . Dans le constructeur de copie, une telle exigence n’existe pas.