Извините, я действительно не знаю, как сделать заголовок для этого вопроса; возможно, есть имя для того, что я пытаюсь сделать, что я не знаю, но я могу объяснить это с помощью некоторого кода:java: «downcasting» к новому объекту/против нарезки
Угадайте, что у вас есть класс, который, к сожалению, не имеет конструктора-копии или общедоступного метода статической копии.
class A
{
private int i; // <- private, cant access
String x; // <- even worse: cant access unless in same pkg!
/* … other stuff, ctor, etc. … */
public A clone()
{
A a = new A();
a.i = i;
a.x = x;
return x;
}
}
Guess дальше, есть некоторая функция, которая возвращает объект этого класса:
public static A someFn(x,y,z);
Теперь проблема: Я хочу, чтобы извлечь из этого класса, чтобы добавить некоторые функции. К сожалению, у меня тоже нет sizeof в java, а не cc или static copy.
Так что, когда я делаю
class B extends A
{
protected w;
public B clone()
{
/* as usual */
}
}
тогда я могу клонировать мой B и получить новый, но как я могу преобразовать возвратила из someFn() в B. Есть в любом случае сделать напротив нарезки в java? если я клонирую его, это все равно A, и я не могу скопировать его поле по полю. Это все просто в C++, но как это сделать в Java?
Ваш пример слишком абстрактно. У каких конструкторов есть A? Как эти частные и пакетно-частные поля устанавливаются при нормальных обстоятельствах? –
Какой беспорядочный вопрос ... –
Если вы говорите о клонировании в java-смысле, тогда, когда вы вызываете 'super.clone()' в 'B', вы получите' B'. –