2010-02-19 3 views
4

Вот мой класс, который реализует конструктор копированияКопировать конструктор класса конкретизации

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

я попытался создать экземпляр для указанного класса в моей основной метод

TestCopyConst testCopyConst = new TestCopyConst(?); 

Я не уверен, что я должен передать как параметр. Если я должен передать экземпляр TestCopyConst затем снова я должен пойти на «новый», который в свою очередь будет снова запрашивать параметр

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

, что здесь не хватает? или концепция конструктора копирования сама по себе что-то другое?

ответ

4

Вам не нужен конструктор, который не является конструктором копирования. Конструктор копирования копирует существующие объекты, вам нужен другой способ сделать их в первую очередь. Просто создайте другой конструктор с разными параметрами и другой реализацией.

2

Вам нужно, чтобы также реализовать конструктор без аргументов:

public TestCopyConst() 
    { 

    } 

Или один, который принимает i:

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

Затем, вы можете просто сделать это:

TestCopyConst testCopyConst = new TestCopyConst(); 

Или это:

TestCopyConst testCopyConst = new TestCopyConst(7); 

Обычно ваш класс будет иметь конструктор no-arg по умолчанию; это перестает быть случаем, когда вы реализуете свой собственный конструктор (при условии, что это Java, как это выглядит).

1

Вы бы использовать конструктор копирования, как перегруженный конструктор, чтобы клонировать объект, но также нужен другой конструктор для инициализации экземпляра обычным способом:

public class TestCopyConst 
{ 
    public int i=0; 

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

    public TestCopyConst(TestCopyConst tcc) 
    { 
     this.i=tcc.i; 
    } 
} 
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() 
    { 
    } 
} 
1

'Концепция конструктора копирования сама что-то другое?'

В Java нет конструкторов копирования, поскольку они имеют C++, то есть они автоматически генерируются и/или вызывается компилятором. Вы можете определить его самостоятельно, но он имеет смысл использовать только , вы его вызываете. Не то же самое, длинным мелом.

Я не уверен, что должен пройти в качестве параметра. Если мне нужно передать экземпляр TestCopyConst, то снова мне нужно перейти на «новый», который в свою очередь снова предложит параметр

Здесь вы доказываете суть. Единственное, что вы можете передать в конструктор копирования, - это еще один экземпляр того же класса (или производного класса ...). Если у вас нет другого экземпляра для копирования, почему вы думаете, что вам нужен конструктор копирования вообще?

+0

Что касается второго момента, я просто пытался испытать конструктор копирования, чтобы узнать, что именно. –

+0

Ну, это не что-то в Java, поэтому забудьте об этом. – EJP