Perché Object.clone () è in grado di "vedere" i campi definiti nelle sottoclassi?

2

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.

    
posta Nemanja Boric 05.04.2013 - 19:40
fonte

1 risposta

3

Vedi questa risposta su SO link

La risposta breve alla tua domanda è sì, è problematico avere il metodo clone sulla classe Object . Secondo Josh Bloch (tramite il link sopra), sarebbe stato meglio definire il metodo clone nell'interfaccia Cloneable .

    
risposta data 05.04.2013 - 20:18
fonte

Leggi altre domande sui tag