Нет, ваша попытка
public Point1(Point1 other)
{
_x = other._x ;
_y = other._y;
}
абсолютно нормально ... (я исправил тип параметра.)
Я бы соблазнился сделать _x
и _y
финальными и сделать класс финальным, но это потому, что мне нравятся неизменяемые типы. Другие, безусловно, имеют разные мнения:)
Клонирование в иерархии наследования немного сложнее - каждый класс в иерархии должен иметь соответствующий конструктор, передавать любой аргумент, заданный конструктору суперкласса, а затем копировать только свои собственные поля. Например:
public class Point2 extends Point1
{
private int _z;
public Point2(Point2 other)
{
super(other);
this._z = other._z;
}
}
Это не так уж плохо на стороне реализации, но если вы хотите точно клонировать Point2
, вам нужно знать , что это Point2
, чтобы вызвать правильный конструктор.
Реализация Cloneable
позволяет сделать это немного проще, но есть и другие вещи, которые нужно учитывать: клонирование объектов не так просто, как может показаться :) (я уверен, что есть запись в Effective Java для него. Если у вас нет копии, купите ее сейчас.)