2016-05-23 2 views
2

У меня есть иерархия классов следующим образом:Иерархия классов в сериализации и десериализации

public class A implements Serializable {} 
public class B extends A {} 
public class C implements Serializable extends B {} 
public class D extends C {} 

Является ли мое суждение правильно?

При сериализации класса D все классы в иерархии сериализованы, потому что подклассы сериализованы.

При десериализации класса D конструктор по умолчанию не требуется, и вся иерархия десериализована.

+0

Я так не думаю. Если вы сериализуете 'D', тогда только' D' получает сериализованную, а не всю иерархию. – markspace

+0

@markspace Вы неверны. Интерфейсы суперклассов наследуются, а сериализация включает все сериализуемые суперклассы. Это довольно простая Java. – EJP

+0

@EJP Итак, вы говорите, что все классы сериализуемы? Или вы говорите, что если 'D' будет сериализован, его суперклассы тоже будут? Я думал, что сериализация включает данные класса, но не включает файлы .class. – markspace

ответ

3

Вы правы. Так как класс верхнего уровня A реализует Serializable, а классы наследуют интерфейсы от своих суперклассов, все ваши классы сериализуемы. Конструкторы по умолчанию не нужны, потому что все классы указывают, будучи сериализуемыми, что их можно безопасно восстановить, читая их состояние из потока.

2

В классе сериализации D поток, [является] всей иерархией сериализован, потому что подклассы сериализованы.

Нет, это все сериализованная потому что база класс A является Serializable.

В потоке D класса десериализации, никакой конструктор параметров не нужен, и вся иерархия десериализована.

Исправить. Ближайшему несериализуемому базовому классу A понадобится конструктор no-args, но в этом случае это java.lang.Object, что и делает.

+0

С тех пор, как вы процитировали, голова, которую я копирую, редактируется широко. – chrylis

+0

@chrylis Ну, этого не должно быть. ОП имеет право изложить свои причины и подтвердить их или скорректировать. – EJP

+0

Я сказал * скопирован-отредактирован *. Я сохранил смысл автора, но исправил английский. – chrylis

Смежные вопросы