用Java构建一个拷贝构造函数

Mas*_*r C 7 java constructor

如何构建一个接收另一个点(x,y)并复制其值的复制构造函数?

我决定签名:public Point1 (Point1 other)但我不知道写些什么...

Point类看起来像:

public class Point1

{
    private int _x ,  _y;    
    public Point1 (Point1 other)
    {
        ...
        ...
    }
//other more constructors here...

}
Run Code Online (Sandbox Code Playgroud)

我试过了:

public Point1 (Point1 other)
{
    _x = other._x ;
    _y = other._y;
}
Run Code Online (Sandbox Code Playgroud)

但我几乎可以肯定我能做得更好..

日Thnx

Jon*_*eet 16

不,你的尝试

public Point1(Point1 other)
{
    _x = other._x ;
    _y = other._y;
}
Run Code Online (Sandbox Code Playgroud)

绝对没问题...(我已经更正了参数类型.)

我会忍不住做出_x_y决赛,并作出级决赛,但那是因为我喜欢稳定的类型.其他人肯定有不同意见:)

在继承层次结构上克隆有点棘手 - 层次结构中的每个类都必须有一个相关的构造函数,传递它给予超类构造函数的任何参数,然后只复制它自己的字段.例如:

public class Point2 extends Point1    
{
    private int _z;
    public Point2(Point2 other)
    {
        super(other);
        this._z = other._z;
    }
}
Run Code Online (Sandbox Code Playgroud)

这在实现方面并不算太糟糕,但如果你想忠实地克隆一个,Point2你需要知道它是Point2为了调用正确的构造函数.

实现Cloneable允许这样做更简单,但还有其他事情要考虑...基本上克隆对象并不像它可能看起来那么简单:)(我确定在Effective Java中有一个条目用于它如果您没有副本,请立即购买.)