直列化の際にバージョン管理を使って、新しいスーパークラスを持つクラスを展開する方法を示します。たとえば、最初のクラスが次の構造を持つとします。
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 のフィールドの保存と復元の責任を負うことになってしまいます。このトピックの詳細は、「スーパークラスが直列化可能でない場合の直列化」を参照してください。