¿Cuál es el propósito de este código?
public Fraction(Fraction other) {
num = other.num;
denom = other.denom;
}
Si usted tiene un constructor de esta manera:
public Fraction(int n, int d) {
num = n;
denom = d;
}
¿Por qué tiene que inicializar other.num
a num
y other.denom
a denom
. ¿Qué pasa con la sintaxis del constructor de copia? ¿Cuál es el propósito?
Si tuviera que escribir simplemente
public Fraction(Fraction other) {
}
Java no es simplemente va a suponer que desea copiar los valores de other
en el nuevo objeto. Java no inicializa automáticamente sus variables para que de esa manera. Para que sea un constructor de copia, usted todavía tiene que escribir manualmente el código que copia los campos de other
al objeto que está creando. Me gusta esto:
public Fraction(Fraction other) {
num = other.num;
denom = other.denom;
}
El constructor crea un nuevo Fraction
pero es el código que escribe en su interior que lleva a cabo manualmente la "copia" que lo convierte en un "constructor de copia" y le permite hacer
Fraction a = Fraction(4, 20);
Fraction b = new Fraction(a);
// b has the same values as a but is a different object
Por supuesto, si usted ya tiene otro constructor, un camino más corto para hacer un constructor de copia es
public Fraction(int n, int d) {
num = n;
denom = d;
}
public Fraction(Fraction other) {
this(other.num, other.denom);
}