будет ли вызываться метод клонирования Asub? Или Асуб глубоко клонирован? Если нет, существует ли способ обеспечить глубокий клон Асуб с помощью такого метода?Клонирование объектов в Java [3 вопроса]
abstract class Top extends TopMost {
protected Object clone() {
Object obj = super.clone();
// deep copy and try catch
}
}
abstract class A extends Top {
protected Object clone() {
Object obj = super.clone();
// deep copy and try catch
}
}
class Asub extends A {
protected Object clone() {
Object obj = super.clone();
// deep copy and try catch
}
public void doSomethingNew() {
}
}
abstract class TopMost {
public void someMethod() {
Top a = (Top) super.clone();
// more code here
}
}
public class Main {
public static void main(String... args) {
Asub class1 = new Asub();
class1.someMethod();
}
}
К сожалению, если 'ASub' также подклассифицирован, подкласс' 'clone()' не может вызывать 'super.clone()', поскольку он возвращает 'ASub' вместо 'ASubSub'. Таким образом, это работает только в том случае, если вы полностью контролируете всю иерархию классов навсегда (и тщательно документировали неконформистскую реализацию «клонирования» для своих преемников). –
@ Péter Török, я полностью согласен с вами. –
спасибо за ваш ответ – Joset