Добавьте копирующий конструктор Bird(Bird other), затем создайте birdClone = new Bird(bird1). Это понятнее, чем внедрять Cloneable ради двух простых полей.
Получение копии экземпляра класса Bird
Добавьте копирующий конструктор 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 копию не создало бы.