Получение копии экземпляра класса Bird

Добавьте копирующий конструктор Bird(Bird other), затем создайте birdClone = new Bird(bird1). Это понятнее, чем внедрять Cloneable ради двух простых полей.

Короткий ответ

Что ответить на собеседовании

Добавьте копирующий конструктор Bird(Bird other), затем создайте birdClone = new Bird(bird1). Это понятнее, чем внедрять Cloneable ради двух простых полей.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо создать дубликат объекта класса Bird и разместить его в переменной birdClone.

public class JetbulbInterview {
    public static void main(String[] args) {
        Bird bird1 = new Bird("Buddy", 100);
        System.out.println(bird1);

        Bird birdClone = ...; // Создать клон объекта
        System.out.println(birdClone);
    }
}

class Bird {
    private String name;
    private int health;

    public Bird(String name, int health) {
        this.name = name;
        this.health = health;
    }

    @Override
    public String toString() {
        return "Bird{name='" + name + "', health=" + health + "}";
    }
}

Ответ

Добавьте копирующий конструктор Bird(Bird other), затем создайте birdClone = new Bird(bird1). Это понятнее, чем внедрять Cloneable ради двух простых полей.

Внутри класса Bird:

public Bird(Bird other) {
    java.util.Objects.requireNonNull(other);
    this.name = other.name;
    this.health = other.health;
}

В main:

Bird birdClone = new Bird(bird1);

Объекты разные, но их значения одинаковы. Ссылка на String может быть общей, поскольку строки неизменяемы; int копируется по значению. Если позднее появятся изменяемые коллекции или вложенные объекты, глубину копирования нужно определить отдельно. Простое birdClone = bird1 копию не создало бы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее