Building a copy constructor in Java

后端 未结 1 1636
借酒劲吻你
借酒劲吻你 2020-11-30 09:45

How do I build a copy constructor that receive another point (x,y) and copy its values ?

I decide a signature: public Point1 (Point1 other) , but I don\

相关标签:
1条回答
  • 2020-11-30 09:57

    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.)

    0 讨论(0)
提交回复
热议问题