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

Делегирование класса в Kotlin

Делегирование класса - когда ваш тип хранит другой объект и перенаправляет ему вызовы. Это композиция: вместо наследования всего родителя вы собираете поведение из готовых кусков. Каждый кусок - отдельный экземпляр с явной ссылкой.

Пусть форматирование текста вынесено в класс Formatter, а Report только хранит данные и просит форматтер оформить строку:

class Formatter { fun title(text: String): String = "=== $text ===" } class Report(val headline: String) { private val formatter = Formatter() fun printTitle() { println(formatter.title(headline)) } } fun main() { Report("sales").printTitle() }

Объект formatter можно передать в конструктор - тогда один и тот же форматтер обслужит несколько отчётов или его подменят в тестах:

class Report( val headline: String, private val formatter: Formatter, ) { fun printTitle() { println(formatter.title(headline)) } }

Такой объект-исполнитель часто реализует интерфейс. Тогда список методов можно не переписывать вручную - следующий урок покажет запись : Interface by obj.

Объявите class Counter с полем value и методом inc(). Объявите class Stats, который в конструкторе принимает Counter и методом show() выводит текущее value счётчика.

Создайте Counter(5), передайте его в Stats, вызовите inc() у счётчика и затем show() у статистики.

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