Jest coś, czego nie rozumiem w zwykłej realizacji metody klonowania. Jeśli przyjrzeć się pierwszemu wierszowi w bloku try w poniższym kodzie, wywołujemy super.clone(), który utworzy instancję super klasy i zwróci odwołanie do obiektu do tej instancji. Teraz ta instancja niekoniecznie zawiera leaseDay, więc jak nam się mówi copy.hireDay? To prawda, że skompiluje się dobrze, ale czy nie powinien się zawiesić, jeśli instancja nie zawiera leaseDay?W clone() używamy super.clone(), a następnie dostęp do zmiennej, która nie jest w super, jak przychodzi?
public Object clone() {
try {
Employee copy = (Employee) super.clone(); // copy ID, name, and salary!
copy.hireDay = (Date) hireDay.clone();
return copy;
} catch (CloneNotSupportedException e) {
System.out.println(e);
return null;
}
}
Czy możesz podać przykład klasy niezgodnej w łańcuchu przodków (najlepiej związanej z klasą Pracownika). Co jest lepszym mechanizmem niż klonowanie? –
Każda klasa, która nie zwraca instancji uzyskanej z 'super.clone()' jest niezgodna. –
Dobrze, więc zawsze musimy zadzwonić do super.clone(). Czy istnieje lepszy mechanizm niż klonowanie? –