Building a copy constructor in Java

Nope, your attempt of

public Point1(Point1 other)
{
    _x = other._x ;
    _y = other._y;
}

is absolutely fine… (I’ve corrected the parameter type.)

I’d be tempted to make _x and _y final, and make the class final, but that’s because I like immutable types. Others definitely have different opinions ๐Ÿ™‚

Cloning on an inheritance hierarchy is slightly trickier – each class in the hierarchy has to have a relevant constructor, pass whatever argument it’s given to the superclass constructor, and then copy just its own fields. For example:

public class Point2 extends Point1    
{
    private int _z;
    public Point2(Point2 other)
    {
        super(other);
        this._z = other._z;
    }
}

That’s not too bad on the implementation side, but if you want to faithfully clone a Point2 you need to know it’s a Point2 in order to call the right constructor.

Implementing Cloneable allows this to be done a bit more simply, but there are other things to consider around that… basically cloning objects isn’t as simple as it might appear ๐Ÿ™‚ (I’m sure there’s an entry in Effective Java for it. If you don’t have a copy, buy one now.)

Leave a Comment