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

Композиция вместо наследования в Java

Наследование удобно не всегда. Если классу нужна только часть чужого поведения, часто проще сохранить помощника в поле. Сделаем класс для проверки текста:

class TextChecker { boolean isLong(String text) { return text.length() > 10; } }

Теперь сделаем класс записи. Он не наследуется от проверяющего класса, а хранит его объект внутри себя:

class Post { private String text; private TextChecker checker; Post(String text, TextChecker checker) { this.text = text; this.checker = checker; } }

Добавим метод, который использует помощника. Класс Post остается самостоятельным, но получает нужное поведение:

boolean hasLongText() { return checker.isLong(text); }

Проверим работу композиции:

TextChecker checker = new TextChecker(); Post post = new Post("Hello Java world", checker); System.out.println(post.hasLongText());

Сделайте класс SalaryChecker с методом, который проверяет, что зарплата больше нуля.

Сделайте класс Employee, который хранит SalaryChecker в поле и использует его при проверке зарплаты.

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