У меня вштал вопрош!
и не один
1. в чем разница super и fileOutputStream?
по логике и то и то ссылается на экземпляр класса родителя
public AmigoOutputStream(FileOutputStream fileOutputStream) throws FileNotFoundException {
super(fileOutputStream.toString());
//super(fileName);
System.out.println(super.toString());
System.out.println(fileOutputStream.toString());
this.fileOutputStream = fileOutputStream;
}
однако вот этот код показывает что ссылки разные
консоль
com.company.AmigoOutputStream@1b28cdfa
java.io.FileOutputStream@eed1f14
соответвенно не выходит переопределить методы как предлогает IDE
@Override
public void write(byte[] b) throws IOException {
super.write(b);
//fileOutputStream.write(b);
}
при таком переопределени в файле только
JavaRush © All rights reserved.
это код мейна
public static void main(String[] args) throws IOException {
try (AmigoOutputStream aos = new AmigoOutputStream(new FileOutputStream(fileName));) {
aos.write("Жопа".getBytes());
}
}
/далее по ходу вопросов я изменил write на fileOutputStream.write(b);/
работает дописывание только если непосредственно вызвать aos.close (тут это реализовано через try)
2. почему так?
а в коде напрямую, когда прога сама по идее close вызывает не работает дописка
public static void main(String[] args) throws IOException {
new AmigoOutputStream(new FileOutputStream(fileName)).write("Жопа".getBytes());
// try (AmigoOutputStream aos = new AmigoOutputStream(new FileOutputStream(fileName));) {
// aos.write("Жопа".getBytes());
// }
}
этот код покажет в файле только жопу
3. почему одинаково работают super(fileOutputStream.toString()); и super(fileName);
предыстория такова, что мне не оч понравилось что обертка берет данные не только от родителя а еще со стороны. хоте реализовать чтобы обертка брала имя файла от родителя. нашел такой вариант. и он работает и даже валидотор съел. потом когда стал тестить понял что fileOutputStream.toString() возвращает билебедру а не имя файла