Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvOpOpPrMix 147 of 147 menu
◀

Смешанная практика ООП в Java

Сделайте record Line с компонентами sku и price. Сделайте класс Cart с методом total(List<Line> lines). Сделайте DiscountCart, наследующий Cart, который возвращает сумму price минус 10, но не ниже 0. Дан список:

import java.util.List; List<Line> items = List.of( new Line("a", 30), new Line("b", 5) );

Выведите итог для Cart и для DiscountCart.

Сделайте sealed interface Auth с вариантами Guest как enum с одной константой и record User(String name). Сделайте интерфейс Greeter с методом greet(). Сделайте класс Portal, который по Auth возвращает "hello guest" или "hello " и имя. Выведите оба варианта.

Даны типы:

interface HasArea { double area(); } record Rect(double w, double h) implements HasArea { @Override public double area() { return w * h; } } enum UnitTag { PLAIN, MARKED }

Соберите список HasArea из двух Rect и одной анонимной реализации с area = 1.0. Выведите сумму площадей и значение UnitTag.MARKED.

Сделайте абстрактный класс Storage с абстрактным методом size(). Сделайте ListStorage, который оборачивает список строк. В Storage храните static-счётчик созданных хранилищ. Создайте два ListStorage, выведите счётчик и оба size().

Сделайте интерфейс Clock с методом now(). Сделайте FixedClock и класс LoudClock, который хранит Clock и в now() дописывает "!" к результату вложенных часов. Выведите время для "09:00".

В пакете billing сделайте record Invoice с компонентами id и sum. В том же пакете сделайте класс Registry со static-картой long - Invoice. Запишите счёт 1 на сумму 100, прочитайте по id и выведите sum().

Сделайте enum Role с константами VIEWER и EDITOR. Сделайте класс Account с полем role и методом canEdit(), который возвращает true только для Role.EDITOR. Сделайте класс AdminAccount, наследующий Account с ролью EDITOR и переопределяющий canEdit() так, чтобы метод всегда возвращал true. Выведите три результата canEdit(): Account(Role.VIEWER), Account(Role.EDITOR), AdminAccount.

Дан класс:

class Profile { private final String city; private int score; Profile(String city) { this.city = city; } void setScore(int score) { this.score = score; if (score > 10) { System.out.println(city); } } }

Создайте профиль с городом "Rome". Присвойте score значения 5 и 11. Зафиксируйте вывод на экран.

Сделайте sealed interface Msg с вариантами record Text(String body) и Ping как enum с одной константой. Сделайте класс Inbox, который хранит List<Msg> и метод textCount() - число сообщений Text. Дан inbox из Ping, Text("a"), Text("b"). Выведите счётчик.

Сделайте интерфейс Ident с методом getId(). Сделайте record Task(long id, String title), реализующий Ident. Напишите метод pickTitle(List<Ident> list, long id), который находит заголовок задачи по id. Дан список из двух Task. Выведите заголовок для id = 2 и для id = 9.

Сделайте record Version(major, minor). Сделайте класс Release со static-полем Version и static-методом set(Version v). Сделайте класс Tool с методом label(), возвращающим "tool". Сделайте VersionTool, наследующий Tool, который выводит "tool " и major() из текущего Release, если версия задана, иначе "tool ?". Установите Version(2, 1) и выведите label().

←
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить