Доброе утро. Разбираю тему сериализации и в одной статье(ссылку оставлю ниже) наткнулся на такое утверждение: "То есть при десериализации вызывается конструктор без параметров родительского НЕсериализуемого класса". И собственно вопрос, а что происходит при вызове конструктора без параметров? Вот есть код: 1. Родительский класс Animal, несериализуемый
public class Animal {
    public String name;
    public int age;
    public String kind;

    public Animal(String name, int age, String kind) {
        System.out.println("Parent constructor");
        this.name = name;
        this.age = age;
        this.kind = kind;
    }

    public Animal() {
    }
}
2. Класс-потомок Cat, сериализуемый
public class Cat extends Animal implements Serializable {
    String bread;
    public Cat(String name, int age, String kind, String bread) {
        super(name, age, kind);
        this.bread = bread;
        System.out.println("Child constructor");
    }

    @Override
    public String toString() {
        return "Cat{" +
                "bread='" + bread + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", kind='" + kind + '\'' +
                '}';
    }
}
3. Метод main
public static void main(String[] args) throws IOException {
        // сериализация кота барсика
        try (FileOutputStream outputStream = new FileOutputStream("C:\\Users\\Admin\\Documents\\code.txt")) {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
            Cat barsik = new Cat("Barsik", 3, "cat", "may-cun");
            objectOutputStream.writeObject(barsik);
        }
        // десериализация барсика
        try (FileInputStream inputStream = new FileInputStream("C:\\Users\\Admin\\Documents\\code.txt")) {
            ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
            Cat loadedBarsik = (Cat) objectInputStream.readObject();
            System.out.println(loadedBarsik);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
И что происходит при
Cat loadedBarsik = (Cat) objectInputStream.readObject();
Ведь именно тогда вызывается конструктор родителя без параметров, верно? Так же я знаю, что при использовании Serializable выделяется память под объект, при этом его конструктор не вызывается. И получается что-то типо:
Object o = new Object(); // и сейчас мы используем нисходящее преобразование до Cat
Cat loadedBarsik = (Cat) o;
Но причем здесь конструктор родителя без параметров, смысл его вызывать? P. S. ссылка на статью