Смешанная практика ООП в 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().