Добрый день!
Создайте несколько интерфейсов.
Например, iReader, iLibrarian, iSupplier и iAdministrator. (Названия даны лишь для наглядности. Желательно придерживаться Java naming convention)
Далее для каждого интерфейса опишите методы.
Например, для iReader -
// сигнатуры методов могут отличаться
takeBook(); // взять книгу
returnBook(); // вернуть книгу
Для iLibrarian
orderBook(); // заказать книгу
Для iSupplier
bringBook(); // принести книгу
Для iAdministrator
findBook(); // найти книгу
overdueNotification(User reader); // уведомить о времени возврата
Дальше вам нужны реализации этих интерфейсов.
Reader implements iReader
Librarian implements iLibrarian
Supplier implements iSupplier
Admin implements iAdministrator
В общем, имплементируем интерфейсы и реализуем эти интерфейсы.
Если например, Admin может не только уведомлять пользователей об истечении срока возврата, но также читать книги, то
Admin implements iAdministrator, iReader
имплементируем нужный интерфейс тоже.
Ну и конечно же нужен класс Book, который будет представлять книгу.
Это простая задача на ООП. Возможно. что названия классов и интерфейсов можно оформить еще красивее, но я на скорую руку сделал, чтобы показать вам саму идею.
Также можно например, Всех этих юзеров наследовать от объекта User.
Т.е.
Reader extends User implements iReader
А в интерфейсах например, использовать generic type. Таким образом реализовать этот интерфейс смогут только классы расширяющие класс User.
Например,
interface iReader<T extends User>
Тогда указанная выше строка будет выглядеть следующим образом:
Reader extends User implements iReader<Reader>