Глубокое копирование конструктора с помощью конструктора копирования на 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 шт):

Автор решения: Roman C

В общем проблема вот в чем

Сat cat7 = new Cat(Cat bb);

здесь после открывающей круглой скобки нарушается синтаксис, и компилятор дальше не смотрит на оставшуюся строчку. Поэтому пишет, что нехватает закрывающей круглой скобки именно в том месте, где возникает ошибка. Чтобы ее исправить, надо удалить оставшуюся часть строки и поставить закрывающую круглую скобку. Примерно так

Сat cat7 = new Cat();

Но это лишь исправит ошибку компиляции. Компилятор видит, что есть конструктор без аргументов и предлагает исправить ошибку вышеуказанным способом. Для того, чтобы воспользоваться другим конструктором, ему необходимо передать аргументом переменную.

Сat cat7 = new Cat(bb);
→ Ссылка