复制构造函数类实例化

时间:2010-02-19 05:10:50

标签: java oop copy-constructor

这是我的类,它实现了复制构造函数

public class TestCopyConst
{
    public int i=0;
    public TestCopyConst(TestCopyConst tcc)
    {
       this.i=tcc.i;
    }
}

我试图在我的主方法

中为上面的类创建一个实例
TestCopyConst testCopyConst = new TestCopyConst(?);

我不确定我应该作为参数传递什么。如果我必须传递一个TestCopyConst实例,那么我必须再去“new”,这反过来会再次提示参数

TestCopyConst testCopyConst = new TestCopyConst(new TestCopyConst(?));

这里缺少什么?或者复制构造函数的概念本身就有所不同?

5 个答案:

答案 0 :(得分:4)

你错过了一个不是复制构造函数的构造函数。复制构造函数复制现有对象,您需要另一种方法来创建它们。只需创建具有不同参数和不同实现的另一个构造函数。

答案 1 :(得分:2)

您还需要实现一个无参数构造函数:

public TestCopyConst()
    {

    }

或者需要i

的人
public TestCopyConst(int i)
    {
        this.i = i;
    }

然后,你可以这样做:

TestCopyConst testCopyConst = new TestCopyConst();

或者这个:

TestCopyConst testCopyConst = new TestCopyConst(7);

通常,您的类将具有默认的无参数构造函数;当你实现自己的构造函数时,这就不再是这种情况了(假设这是Java,它看起来像)。

答案 2 :(得分:1)

您可以使用复制构造函数作为重载构造函数来克隆对象,但您还需要另一个构造函数来以正常方式初始化实例:

public class TestCopyConst
{
    public int i=0;

    public TestCopyConst(int i)
    {
       this.i = i;
    }

    public TestCopyConst(TestCopyConst tcc)
    {
       this.i=tcc.i;
    }
}

答案 3 :(得分:1)

  

'复制构造函数的概念是   本身有什么不同?'

Java没有C ++拥有它们的复制构造函数,即由编译器自动生成和/或调用的复制构造函数。您可以自己定义一个,但只有在调用它时才有用。不一样,用长粉笔。

  

我不确定我应该作为参数传递什么。如果我必须传递一个TestCopyConst实例,那么我必须再去“new”,这反过来会再次提示参数

这里你证明了这一点。您可以传递给复制构造函数的唯一事情是同一个类(或派生类...)的另一个实例。如果您没有要复制的其他实例,为什么您认为您需要复制构造函数?

答案 4 :(得分:0)

你需要

public class TestCopyConst 
{ 
    public int i=0; 
    public TestCopyConst(TestCopyConst tcc) 
    { 
       this.i=tcc.i; 
    } 
    public TestCopyConst(int val)
    {
       i = val;
    }
    //or
    public TestCopyConst()
    {
    }
}