直列化の際にバージョン管理を使って、新しいスーパー・クラスを持つクラスを展開する方法を示します。たとえば、最初のクラスが次の構造を持つとします。
class A {...}; class C extends A {...};
展開したクラスが次の構造を持つとします。
class A {...}; class B extends A {...}; class C extends B {...};
この場合、新しいバージョンのサブクラスCは古いバージョンのサブクラスCを読めなければなりません。逆に、古いバージョンのサブクラスCも新しいバージョンのサブクラスCを読めなければなりません。この例題では、この原理を説明します。
展開されたクラス(ASuperClassとASubClass)は、オリジナル・クラス(ASuperClassとASubClass)でserialverコマンドを使用して取得するserialVersionUIDフィールドを定義する必要があります。
この例題では、スーパー・クラス(AとB)はSerializableインタフェースを実装します。実装しなければ、サブクラスCがAとBのフィールドの保存と復元の責任を負うことになってしまいます。このトピックの詳細は、「スーパー・クラスが直列化可能でない場合の直列化」を参照してください。