Я только что прочитал документацию Serialization и был отчасти удивлен этим (подчеркнуто мой):Serilalization подклассов
Метод
writeObject
отвечает за запись состояния объекта для его определенного класса, так что соответствующий метод readObject может восстановить его. Механизм по умолчанию для сохранения полей объекта можно вызвать, вызвавout.defaultWriteObject
. Метод не нужно относиться к себе с государством, принадлежащих к его суперкласса или подклассов. Состояние сохраняется путем записи отдельных полей вObjectOutputStream
с использованием методаwriteObject
или с использованием методов примитивных типов данных, поддерживаемых DataOutput.
Таким образом, это не гарантирует, что superclass
«s будет сериализовать в следующем случае:
public class MySuperClass implements Serializable{
public int a;
}
public class MySubClass extends MySuperClass{
public int b;
}
MySubClass msc = new MySubClass();
msc.a = 10
msc.b = 20
//serialize msc
Таким образом, это зависит от конкретной реализации, если значение десериализованного msc.a
будет 10
или 0
?
Как вы переводили «не нужно беспокоиться» на «не гарантировано»? – Kayaman
@ Кайаман Да, мое непонимание документации. – user3663882