Archy
1 уровень
Зачем переопределять методы с одним лишь делегированием выполнения, если они и так неявно прописаны в классе-обертке?
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #3392370
22 января 2024, 08:21
Поддерживаю вопрос:
объясните для тупых - нахрена мы используем одновременно и наследование, и композицию??? У нас на выходе объект FileOutputStream, который в себе содержит объект FileOutputStream.
В итоге мы вызываем методы то у объекта-зависимости, то у самого объекта. Зачем?
0
Стас ПасинковSoftware Developer в ZipyMaster
23 января 2024, 00:05
покажіть код
в умові задачі нічого такого нема
мы используем одновременно и наследование, и композицию
бо в цьому прикол цього патерну.
він призначений для того, щоб ми могли додати якусь функціональність до якогось класу, до якого в нас нема доступу (наприклад, якийсь клас зі стандартної бібліотеки джави, чи просто якийсь клас із іншої бібліотеки). такий клас, в який ми не можемо залізти всередину і дописати потрібний нам функціонал.
в задачі цей "додатковий функціонал" - це пункт 2.2 Записать в конец файла фразу "JavaRush © All rights reserved." такого функціоналу нема в FileOutputStream, правильно ж?
для того щоб змінити внутрішню поведінку - нам і потрібна композиція. маючи об'єкт класу ми у потрібний момент можемо дописати те, що нам треба.
для чого тоді треба наслідування?
для того, щоб ми могли передавати цей наш об'єкт в інші методи, які очікують від нас якийсь FileOutputStream. тільки тепер ми можемо передати в той метод не стандартний FileOutputStream, а вже модифікований нами, із додатковим функціоналом.
+2
Anonymous #3392370
23 января 2024, 18:18
Стас, спасибо за ответ! Да, как раз перечитал про реализацию декораторов в джаве, все встало на свои места. Смутило переплетение вызовов методов, то вызываем методы супер-класса, то методы объекта композиции.
0