Глубокое копирование конструктора с помощью конструктора копирования на Java
В классе Cat имеется 3 конструктора:
public class Cat {
private double originWeight;
private double weight;
private double minWeight;
private double maxWeight;
private double weightFoodEaten;
private static int count = 0;
public static final int COUNT_CAT_EYES = 2;
public static final double MIN_CAT_WEIGHT = 1000.0;
public static final double MAX_CAT_WEIGHT = 9000.0;
private Color catColor;
public Cat() {
weight = 1500.0 + 3000.0 * Math.random();
originWeight = weight;
minWeight = 1000.0;
maxWeight = 9000.0;
weightFoodEaten = 0;
count++;
}
public Cat(double weight) {
this();
this.weight = weight;
}
public Cat(Cat n) {
weight = n.weight;
originWeight = n.originWeight;
minWeight = n.minWeight;
maxWeight = n.maxWeight;
weightFoodEaten = n.weightFoodEaten;
count++;
}
}
}
public Cat(Cat n) является копией конструктора Cat(double weight).
В классе Test_2 я создаю сначала объект конструктора Cat(double weight) и потом его копию Cat(Cat n)
подскажите, почему не могу создать копию.
Мне нужно именно создать копию с помощью конструктора копирования в классе.
public class Test_2 {
public static void main(String[] args) {
Cat bb = new Cat(5000);
Сat cat7 = new Cat(Cat bb);
}
}
Ответы (1 шт):
В общем проблема вот в чем
Сat cat7 = new Cat(Cat bb);
здесь после открывающей круглой скобки нарушается синтаксис, и компилятор дальше не смотрит на оставшуюся строчку. Поэтому пишет, что нехватает закрывающей круглой скобки именно в том месте, где возникает ошибка. Чтобы ее исправить, надо удалить оставшуюся часть строки и поставить закрывающую круглую скобку. Примерно так
Сat cat7 = new Cat();
Но это лишь исправит ошибку компиляции. Компилятор видит, что есть конструктор без аргументов и предлагает исправить ошибку вышеуказанным способом. Для того, чтобы воспользоваться другим конструктором, ему необходимо передать аргументом переменную.
Сat cat7 = new Cat(bb);