Stavo vagando come può Object.Clone () accedere ai campi dei campi che sono effettivamente definiti nelle sottoclassi, e non l'effettiva implementazione di questa funzione.
Ciò che mi infastidisce è che non riesco a vedere la logica per consentire alla classe di base (anche se è "speciale") di accedere ai campi definiti nelle sottoclassi - non rompe l'intero concetto di ereditarietà degli oggetti?
Considera questo:
class Test implements Cloneable
{
private String test_field;
public Test()
{
}
public Test clone() throws CloneNotSupportedException
{
return (Test)super.clone();
}
}
Qui, chiamando Test.clone()
copia anche test_field
. Le cose mi stanno diventando ancora più strane quando si tratta della situazione in cui Test
è dichiarato come una classe astratta: chiamare clone()
mi consentirà (in qualche modo) di ottenere l'istanza della classe astratta.