AmigoOutputStream

  • 10
  • Недоступна
1 Измени класс AmigoOutputStream так, чтобы он стал Wrapper-ом для класса FileOutputStream. Используй наследование. 2 При вызове метода close() должны выполняться следующая последовательность действий: 2.1 Вызвать метод flush(). 2.2 Дописать следующий текст "JavaRush © All rights reserved.", использ
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (87)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Oleg19 уровень
16 апреля, 14:07
одного меня постановка задачи только еще больше путает после и без того не самой лучшей лекции про обертывание? Вроде как надо создавать абстрактный класс, в котором есть конструктор принимающий (приведенный к интерфейсу) тип-оборачиваемого класса и уже в созданном классе "расширять" функциональность! Но фраза: " Измени класс AmigoOutputStream так, чтобы он стал Wrapper-ом для класса FileOutputStream. Используй наследование." меня вообще дезориентирует в нуль! Кроме того, как я понял необходимо наследоваться от родителя обертываемого класса!!! То есть от OutputStream! Что вообще происходит с лекциями, что за ....???
Артём Стариков25 уровень, Екатеринбург
14 апреля, 04:28
JavaRush © All rights reserved. Если забудешь после ресёрвд поставить точку, то никогда не узнаешь почему не прошел 5 пункт валидатора
Рустем19 уровень, Казань
12 апреля, 07:47
Объясните, а то я не понял) 1) В лекции говорится "1) Создать свой класс-обертку и унаследоваться от того же класса/интерфейса что и оборачиваемый объект.", но в данной задаче мы наследуемся от самого класса FileOutputStream, а не его родителя OutputStream. 2) Валидатор такое принял: public AmigoOutputStream(FileOutputStream fileOutputStream) throws FileNotFoundException{ super(fileName); this.fileOutputStream = fileOutputStream; } Получается, что super - создает объект FileOutputStream, а еще мы дополнительно передаем новый FileInputStream. А делегируем методы, видимо потому, что по умолчанию будут использоваться методы объекта super, а не переданного. 3) Мне кажется, что это обычное наследование, но просто сюда прикрутили элементы обертки, и "типа" это стало оберткой. 4) Да и зачем вообще это наследование, если мы все делегируем?
NewBuy19 уровень, Санкт-Петербург
6 апреля, 13:32
У меня одного возникло чувство, что нас заставляют писать какую-то индусню?
MrKermit19 уровень, Москва
17 апреля, 08:55
+1 )))
Tom Riddle20 уровень, Москва
29 марта, 09:53
Задача говно, автор дурак.
Евгений20 уровень, Днепр
11 марта, 21:39
Все стало просто после вызова в конструкторе
super("/dev/null");
Alexey Tarakanov22 уровень, Москва
10 марта, 23:58
Никак не поддаются эти wrapperы мне :( не могу усвоить логическую цепочку, так чтобы воспроизвести и объяснить почему именно так. Надеюсь дальше ещё будут задачи на эту тему.
Aku23 уровень, Новосибирск
9 марта, 16:19
Как понять какие методы надо делегировать, а какие нет? Почему не обязательно делегировать все методы?
Mike Woo24 уровень, Москва
21 марта, 12:51
Те же, что и в предыдущей задаче.
Александр22 уровень, Казань
7 марта, 09:47
// There is no default constructor available in java.io.FileOutputStream
Это означает что когда мы запускаем конструктор класса AmigoOutputStream, то также запускается конструктор класса от которого мы наследуемся FileOutputStream. А все конструкторы хотят на вход данные: поэтому надо еще super запустить и данные какие то передать:
super("Java");
p.s. Я вручную писал, по дефолту конструктор такой получается.
public AmigoOutputStream(@NotNull String name, FileOutputStream component) throws FileNotFoundException {
        super(name);
        this.component = component;
}
Вячеслав20 уровень, Санкт-Петербург
7 марта, 10:18
Ну ещё нужно, в таком случае, помнить, что если в проекте не будет файла "Java", то вылетит exception. Ниже есть коммент "задача кривая как моя жизнь". =) Вынужден согласится. Тут получается, что вызов конструктора родительского класса осуществляется только чтобы угодить компилятору. Новый объект класса FileInputStream создаётся ещё в main. Получается в итоге, что у нас создаётся объект со всеми атрибутами класса FileInputStream + с полем, которое имеет все атрибуты класса FileInputStream. Как-то... масло масляное.
Евгений20 уровень, Днепр
11 марта, 21:48
Exception вылетит, если в текущем каталоге будет файл "Java", но мы не сможем его перезаписать. Для этого есть /dev/null в linux и nul, если не ошибаюсь, в Windows.
Вячеслав20 уровень, Санкт-Петербург
12 марта, 06:49
Да, согласен. Неправильно сказал.
Николай22 уровень
22 февраля, 06:20
Для быстрого переопределения методов комбинация кнопок Ctrl + O Для быстрого создания классов интерфейса Ctrl + I Задачка на самом деле дает возможность изучить несколько важных моментов, главное не подглядывать и честно решать и искать причинно-следственные связи.