Задача решена, но понятно не все. Прошу прояснить некоторые моменты.
public static String fileName = "d:\\temp\\file2";
FileOutputStream component;
public AmigoOutputStream(FileOutputStream component) throws FileNotFoundException {
    super(fileName);
    this.component = component;
}
Вызываем конструктор родителя с аргументом fileName, потому что у родителя нет конструктора по умолчанию. Этот конструктор создает под капотом объект типа File с "метаданными" fileName, если можно так сказать. Вопрос 1: ссылку на объект типа File мы нигде не создаем, выходит у нас создается ненужный объект, который мы нигде не используем? Потом в задании одно из требований - дописать текст в существующий файл при вызове метода close(), ок добавим функционал методу:
@Override
public void close() throws IOException {
    String someText = "Тратата";
    component.write(someText.getBytes());
    component.close();
}
Теперь собственно пробую сделать эту дозапись:
new AmigoOutputStream(new FileOutputStream(fileName, true)).close;
Вопрос 2: Файл был затерт и записан со строкой "Тратата", вместо двух таких (одна уже была до начала записи). Почему не произошла дозапись? Дозапись происходит только если добавить аргументы true в вызов конструктора родителя super(fileName, true), и при создании потока в мейне. Вопрос 3: Где связь этого конструктора (super(...)) или же созданного им объекта типа File с нашим объектом component, делегирующим методы FileOutputStream? Пример был бы на много понятнее, если бы наследовать нужно было бы OutputStream, тогда не пришлось бы вызывать конструктор родителя и создавать непонятного назначения без ссылки объект типа File.