为什么克隆时不执行构造函数

时间:2015-03-18 13:51:00

标签: java core

Animal animal = new Animal(101);              //Constructor is executed.

Animal clone=(Animal)animal.clone()     //Constructor is not executed. Why ?

2 个答案:

答案 0 :(得分:3)

clone()类中给出的Object方法的默认实现不会调用任何类型的构造函数。

它是对象的“浅拷贝”,因为它通过创建新实例然后通过赋值复制内容来创建Object的副本,这意味着如果您的Class包含可变字段,那么原始对象和克隆都将引用相同的内部对象

尝试查看this页面。

答案 1 :(得分:0)

您的构造函数未被调用,因为您正在调用clone()方法。 根据克隆方法的实现方式,它不需要调用构造函数。

构造函数涉及的一种方法是使用复制构造函数实现clone方法,如下所示:

public class A implements Cloneable{

private int example;

public A(){
//this is the default constructor, normally not visible and normally not needed, 
//but needed in this case because you supply another constructor
}

public A(A other){
    this.example = other.example;
}

//You may specify a stronger type as return type
public A clone(){
    return new A(this);
}

}

现在,每次调用clone方法时,都会调用复制构造函数(带有A参数的复制构造函数)。

问候 我