En nuestra discusión anterior, hemos llegado a saber cómo pasar una referencia de objeto a un método Del mismo modo, podemos pasar la referencia a un constructor para inicializar las variables de instancia de otro objeto de la misma clase. Puede usar el mismo valor de las variables de instancia del objeto que se envía al constructor. Un objeto se copia a otros objetos. Echemos un vistazo a este Java Tutorial Copy Constructor en lenguaje Java.
Java Tutorial Copy Constructor en Java
- Ventajas de usar Copy Constructor
- Desventajas de usar Copy Constructor
- Programa para Copy Constructor
- Explicación del código y salida de Java
Ventajas de usar Copy Constructor
Hay varios casos de uso en los que Copy Constructors funciona bien con respecto a otros constructores en Java.
Como sabemos, los objetos se pueden clonar en Java utilizando el método clone (). Pero copiar objetos usando clone () no es flexible y extensible, tampoco funciona bien.
El primer problema es que sin llamada de constructor sucede cuando el objeto está siendo clonado. Como resultado, es su responsabilidad, como escritor del método de clonación, asegurarse de que todos los miembros se hayan configurado correctamente. Aquí hay un ejemplo de dónde las cosas podrían salir mal.
Considere una clase haciendo un seguimiento del totalnúmero de objetos de ese tipo, utilizando un miembro int estático. En los constructores aumentarías la cuenta. Sin embargo, si clona el objeto, ya que no se llama a ningún constructor, ¡el recuento no reflejará realmente el número de objetos!
Además, si la clase tiene campos finales, estosno se le puede dar un valor en el método de clonación. Conduce a problemas al inicializar correctamente los últimos campos del objeto. Si el campo final se refiere a algún estado interno del objeto, entonces el objeto clonado termina compartiendo el estado interno, y esto seguramente no es correcto para los objetos mutables.
Desventajas de usar Copy Constructor en Java
Como un objeto es la réplica de otro, cualquiercambiar en el primero cambiará inadvertidamente los valores de las variables de instancia de otro. Por lo tanto, debe tener cuidado y mejor no declarar el constructor de copias como público. De lo contrario, durante la herencia, no satisface el Principio abierto-cerrado (OCP) El OCP, por Bertrand Meyer, afirma que las entidades de software deben estar abiertas para la extensión, pero cerradas para modificaciones.
Programa para Copy Constructor
class Employee{ String employeeName; String address; int age; double salary; /*Default Constructor */ Employee(){ employeeName = "Platini"; address = "France"; age = 45; salary = 120500.92; } /* Parameterized Constructor */ Employee(String empName,String addr,int ag,double sal){ employeeName = empName; address = addr; age = ag; salary = sal; } /* Copy Constructor */ Employee(Employee emp){ employeeName = emp.employeeName; address = emp.address; age = emp.age; salary = emp.salary; } void showDetails(){ System.out.println("Employee's Name: "+employeeName); System.out.println("Employee's Address: "+address); System.out.println("Employee's Age: "+age); System.out.println("Employee's Salary: "+salary); } } class ConstructorDemo{ public static void main(String args[]){ System.out.println("Employee Details"); System.out.println("----------------"); Employee employee1 = new Employee(); employee1.showDetails(); System.out.println("----------------"); String employeeName = "John"; String address = "Los Angles"; int age = 25; double salary = 34503.92; Employee employee2 = new Employee(employeeName,address,age,salary); employee2.showDetails(); System.out.println("----------------"); Employee employee3 = new Employee(); employee3.showDetails(); System.out.println("----------------"); Employee employee4 = new Employee(employee2); employee4.showDetails(); System.out.println("----------------"); Employee employee5 = new Employee(employee3); employee5.showDetails(); } }
Salida
Explicación del código y salida de Java
Observe cuidadosamente el código marcado en rojo,básicamente, en la clase Employee, encontrará la sintaxis sobre cómo declarar el constructor de copias. Hemos creado dos objetos más, empleado 4 y empleado5, que son una copia de empleado2 y empleado3 respectivamente. A partir de la salida, es visible que las variables de instancia de employee4 tienen el mismo valor que los valores de las variables de instancia de employee2. Lo mismo es cierto para el empleado5.
A continuación, veremos cómo usar la palabra clave "estática" en Java. Consulte más tutoriales útiles y pautas finales sobre programación Java aquí.
Comentarios