Решая задачу task2018, заметил следующее: сериализация и десериализация искажают данные наследуемого поля, если: 1. либо не пометить класс-предок как Serializable; 1. либо не написать в сериализуемом классе-потомке собственных реализаций методов writeObject и readObject. --- так вот вопросы: 1. Почему джава успешно сериализует и десериализует (без Exceptions), но при этом искажает данные, если не проделать что-то из вышенаписанного? 2. Почему эти методы нужно писать, и кто их вызывает, если они написаны у класса-потомка, но в методе main у объектов этого класса эти методы никто и ничто не вызывает. (Одноименные методы вызываются лишь у соответствующих потоков ObjectOutputStream и ObjectInputStream, но не у объектов класса, которые в данный поток следует передать) Причем, эти методы не являются переопределенными - при написании аннотации @Override - подчеркивается красным. 3. Как и почему это вообще работает??? 4. Перед последними двумя попытками отправить на проверку Ментор подсказывал "В методе writeObject должен быть вызван метод defaultWriteObject на объекте полученном в качестве параметра." "В методе readObject должен быть вызван метод defaultReadObject на объекте полученном в качестве параметра." Собственно, я-то эти вызовы добавил, но что они дали? До этого ведь успешно пропускало, и вывод на экран соответствовал ожидаемому. --- Решение не прикрепляю, т.к. оно у меня все же зачлось. Но, думаю, у всех, кто решил, оно и так стандартное.