Una forma de iniciar un objeto podría ser mediante la copia de los valores de los atributos de otro objeto ya existente. Imagina que necesitas varios objetos iguales (con los mismos valores en sus atributos) y que ya tienes uno de ellos perfectamente configurado (sus atributos contienen los valores que tú necesitas). Estaría bien disponer de un constructor que hiciera copias idénticas de ese objeto.
Durante el proceso de creación de un objeto puedes generar objetos exactamente iguales (basados en la misma clase) que se distinguirán posteriormente porque podrán tener estados distintos (valores diferentes en los atributos). La idea es poder decirle a la clase que además de generar un objeto nuevo, que lo haga con los mismos valores que tenga otro objeto ya existente. Es decir, algo así como si pudieras clonar el objeto tantas veces como te haga falta. A este tipo de mecanismo se le suele llamar constructor copia o constructor de copia.
Un constructor copia es un método constructor como los que ya has utilizado pero con la particularidad de que recibe como parámetro una referencia al objeto cuyo contenido se desea copiar. Este método revisa cada uno de los atributos del objeto recibido como parámetro y se copian todos sus valores en los atributos del objeto que se está creando en ese momento en el método constructor.
Un ejemplo de constructor copia para la clase Punto
podría ser:
public Punto (Punto p) { this.x= p.obtenerX(); this.y= p.obtenerY(); }
En este caso el constructor recibe como parámetro un objeto del mismo tipo que el que va a ser creado (clase Punto
), inspecciona el valor de sus atributos (atributos x
e y
), y los reproduce en los atributos del objeto en proceso de construcción (this
).
Un ejemplo de utilización de ese constructor podría ser:
Punto p1, p2;
p1= new Punto (10, 7);
p2= new Punto (p1);
En este caso el objeto p2
se crea a partir de los valores del objeto p1
.