Какой результат компиляции и выполнения программы:

import java.io.*;

public class NewClass {
    public static void main(String[] args) throws Exception {
        ByteArrayOutputStream bOut = new ByteArrayOutputStream();
        ObjectOutputStream oOut = new ObjectOutputStream(bOut);
        oOut.writeObject(new Sub()); 
        System.out.println("");
        ByteArrayInputStream bIn = new ByteArrayInputStream(bOut.toByteArray());
        ObjectInputStream oIn = new ObjectInputStream(bIn);
        oIn.readObject();
    }
}

class Base {
    private int baseField = getInt(1);

    public Base() {
        System.out.print("Base.Base() ");
    }

    protected int getInt(int i) {
        System.out.print(i + " ");
        return i;
    }
}

class Sub extends Base implements Serializable {
    private int subField = getInt(2);

    public Sub() {
        System.out.print("Sub.Sub() ");
    }
}
Explanation
При десериализации объекта класса, реализующего Serializable, его конструктор не выполняется, а поля не инициализируются значениями по умолчанию. Однако если создать сериализуемый (через Serializable) класс, который наследует несериализуемый класс, при десериализации его объекта происходит инициализация по умолчанию полей суперкласса и вызов его конструктора.

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты