Что такое сериализация можно почитать в отличной статье Евгения Матюшкина.
Я же отмечу случай с этим чудом техники в аспекте наследования классов. Интерфейс Serializable не требует от разработчика никаких действий, однако важно помнить, что внутренний механизм сериализует лишь поля этого класса и поля наследников, а поля родителя будут инициализированы с помощью конструктора без параметров.
То есть:
Теперь поочердно объявляя интерфейс для одного класса иерархии получаем:
Я же отмечу случай с этим чудом техники в аспекте наследования классов. Интерфейс Serializable не требует от разработчика никаких действий, однако важно помнить, что внутренний механизм сериализует лишь поля этого класса и поля наследников, а поля родителя будут инициализированы с помощью конструктора без параметров.
То есть:
import java.io.*;
class GrantParent implements Serializable {
private String grandParentId;
public String getGrandParentId() {
return grandParentId;
}
public void setGrandParentId(String grandParentId) {
this.grandParentId = grandParentId;
}
}
class Parent extends GrantParent {
private String parentId;
Parent() {
parentId = "Parent Default Value";
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
}
class Child extends Parent {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("Child");
sb.append("{id='").append(id).append('\'');
sb.append(", parentId='").append(getParentId()).append('\'');
sb.append(", grandParentId='").append(getGrandParentId()).append('\'');
sb.append('}');
return sb.toString();
}
}
* This source code was highlighted with Source Code Highlighter.
Теперь поочердно объявляя интерфейс для одного класса иерархии получаем:
Child{id='John Doe', parentId='NotNullString for Parent', grandParentId='NotNullString for GrandParent'}
дляclass GrantParent implements Serializable
Child{id='John Doe', parentId='NotNullString for Parent', grandParentId='null'}
дляclass Parent implements Serializable
Child{id='John Doe', parentId='Parent Default Value', grandParentId='null'}
дляclass Child implements Serializable