- f3ex,
com.javarush.task.task18.task1813
Подскажите где я не прав в ходе рассуждения.
Задание
Рыба:
1. Хотят наследование — ну окей, добавляем
2. Но в конструкторе хотят увидеть:
Но в main у нас:
Т.е. в консруктор я принимаю FileOutputStream(fileName), но мне приходится еще дергать super(fileName);
Зачем fileName использовать два раза?
Ну и я не понимаю — мы создаем объект AmigoOutputStream как потомом FileOutputStream, но работает внутри AmigoOutputStream с другим FileOutputStream (который private FileOutputStream fileOutputStream)
Задание
AmigoOutputStream
1 Измени класс AmigoOutputStream так, чтобы он стал Wrapper-ом для класса FileOutputStream. Используй наследование.
2 При вызове метода close() должны выполняться следующая последовательность действий:
2.1 Вызвать метод flush().
2.2 Дописать следующий текст «JavaRush © All rights reserved.«, используй метод getBytes().
2.3 Закрыть поток методом close().
Требования:
1. Метод main изменять нельзя.
2. Класс AmigoOutputStream должен наследоваться от класса FileOutputStream.
3. Класс AmigoOutputStream должен принимать в конструкторе обьект типа FileOutputStream.
4. Все методы write(), flush(), close() в классе AmigoOutputStream должны делегировать свое выполнение объекту FileOutputStream.
5. Метод close() должен сначала вызвать метод flush(), затем дописать текст, затем закрыть поток.
Рыба:
public class AmigoOutputStream {
public static String fileName = "C:/tmp/result.txt";
public static void main(String[] args) throws FileNotFoundException {
new AmigoOutputStream(new FileOutputStream(fileName));
}
}
1. Хотят наследование — ну окей, добавляем
public class AmigoOutputStream extends FileOutputStream
2. Но в конструкторе хотят увидеть:
private FileOutputStream fileOutputStream;
public AmigoOutputStream(FileOutputStream fileOutputStream) throws FileNotFoundException {
super(fileName);
this.fileOutputStream = fileOutputStream;
}
Но в main у нас:
new AmigoOutputStream(new FileOutputStream(fileName));
Т.е. в консруктор я принимаю FileOutputStream(fileName), но мне приходится еще дергать super(fileName);
Зачем fileName использовать два раза?
Ну и я не понимаю — мы создаем объект AmigoOutputStream как потомом FileOutputStream, но работает внутри AmigoOutputStream с другим FileOutputStream (который private FileOutputStream fileOutputStream)