Длинный комментарий, а не ответ как таковой.
ООП, как правило, должен моделировать объекты реального мира, где это возможно, в этом вся суть.Почему ты клонируешь книги?Рассматривали ли вы моделирование библиотеки реального мира?Это было бы яснее, по крайней мере, для меня.
В каждом экземпляре Библиотеки есть библиотекарь.Или даже коллекция объектов Библиотекаря.
Каждая библиотека имеет - коллекцию объектов Книги.
Разве вы не можете сказать, что каждый библиотекарь имеет - коллекцию объектов Книги?
Чтобы библиотекарь мог добавить Книгу в свою коллекцию экземпляров Книги.Когда это происходит, Книга удаляется из коллекции Библиотеки.
Конечно, теперь, когда у библиотекаря есть книга, в своей коллекции они могут изменить книгу.
import java.util.ArrayList;
import java.util.List;
public class Librarian {
private List<Book> books = new ArrayList<>();
public Librarian() {
}
public void borrowBook(Book book) {
books.add(book);
}
public List<Book> borrowedBooks() {
return books;
}
public Book returnBook(Book book) {
int bookNumber = book.getNumber();
//your code...
return books.get(3); //wait, which book?
}
}
Просто для начала пища для размышлений.По сути, присвойте каждой книге уникальный идентификатор при ее создании.Возможно, вы захотите ограничить библиотекаря только одной книгой за раз, или, может быть, двумя.
Объясните мне, как мне пять лет, потому что я не понимаю.Домашнее задание разрешено на SO, если это HW.Может быть, клонирование является требованием HW?
Есть определенные проблемы с вышеупомянутым подходом, но, надеюсь, это может прояснить, как подходить к модели.