Pull to refresh

java.io.Serializable и наследование

Reading time2 min
Views25K
Что такое сериализация можно почитать в отличной статье Евгения Матюшкина.

Я же отмечу случай с этим чудом техники в аспекте наследования классов. Интерфейс 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
Tags:
Hubs:
+5
Comments6

Articles

Change theme settings