Философия Java


Конструкторы копирования


Возможно клонирование показалось вам сложным процессом и вам хочется найти ему более удобную альтернативу. Таким решением (особенно если вы владеете Си++) является создание специального конструктора, задачей которого будет создание дубликата объекта. В Си++ такие конструкторы называются конструкторами копирования. На первый взгляд они могут показаться очевидным выходом из положения, но применить их на практике вам не удастся. Рассмотрим пример:

//: Приложение А:CopyConstructor.java

// Конструктор для копирования объектов одинаковых типов // как способ создания локальных копий.

class FruitQualities { private int weight; private int color; private int firmness; private int ripeness; private int smell; // и т.д.

FruitQualities() { // Конструктор по умолчанию

// для совершения каких-либо необходимых действий...

} // Прочие конструкторы:

// ...

// Конструктор копирования:

FruitQualities(FruitQualities f) { weight = f.weight; color = f.color; firmness = f.firmness; ripeness = f.ripeness; smell = f.smell; // и т.д.

} }

class Seed { // Поля...

Seed() { /* Конструктор по умолчанию */ } Seed(Seed s) { /* Конструктор копирования */ } }

class Fruit { private FruitQualities fq; private int seeds; private Seed[] s; Fruit(FruitQualities q, int seedCount) { fq = q; seeds = seedCount; s = new Seed[seeds]; for(int i = 0; i < seeds; i++) s[i] = new Seed(); } // Прочие конструкторы:

// ...

// Конструктор копирования:

Fruit(Fruit f) { fq = new FruitQualities(f.fq); seeds = f.seeds; // Быстрый вызов всех конструкторов копирования:

for(int i = 0; i < seeds; i++) s[i] = new Seed(f.s[i]); // Действия других конструкторов копирования...

} // Для обеспечения размещения полученных конструкторов (или других

// методов) в различных качествах:

protected void addQualities(FruitQualities q) { fq = q; } protected FruitQualities getQualities() { return fq; } }

class Tomato extends Fruit { Tomato() { super(new FruitQualities(), 100); } Tomato(Tomato t) { // Конструктор копирования




Начало  Назад  Вперед