Già che ci sono (anche se l'ora è tarda) volevo darti un breve chiarimento anche sul fatto che l'ereditarietà
può c'entrare ma nel seguente modo.
Prendiamo un caso semplice e comprensibile: una classe Persona e una Studente. Qui la ereditarietà HA senso: uno studente
è una persona. Quindi se studente ha solo la matricola in più rispetto alla persona, le due classi si possono scrivere così:
public class Persona {
private String nome;
private String cognome;
// metodi pubblici getter/setter per nome/cognome (più altro eventuale)
}
public class Studente extends Persona {
private String matricola;
// metodi pubblici getter/setter per matricola (più altro eventuale)
}
Un altro caso diverso: Punto2D e Punto3D. Qui la ereditarietà NON ha senso. Un Punto3D NON è un "caso particolare" di Punto2D ... è proprio un'altra cosa! Quindi:
public class Punto2D {
private double x;
private double y;
// metodi pubblici getter/setter per x/y (più altro eventuale)
}
public class Punto3D {
private double x;
private double y;
private double z;
// metodi pubblici getter/setter per x/y/z (più altro eventuale)
}
Nel primo caso Persona/Studente, Studente estende Persona e permette quindi di: a) avere già nell'oggetto Studente i campi nome/cognome, b) ereditare i membri accessibili (non quelli private).
Ma resta comunque il fatto che in entrambi i casi se vuoi riversare i dati da un oggetto all'altro dovresti poi fare:
Persona persona1 = .......
Studente studente1 = new Studente();
studente1.setNome(persona1.getNome());
studente1.setCognome(persona1.getCognome());
studente1.setMatricola("1234"); // in più rispetto a Persona
Punto2D p2d = ......
Punto3D p3d = new Punto3D();
p3d.setX(p2d.getX());
p3d.setY(p2d.getY());
p3d.setZ(0); // in più rispetto a Punto2D, per esempio lo fissiamo a 0 sul piano z