私のサブクラスはSerializableを実装していますが、私のスーパークラスは実装していません。シリアル化でスーパークラスのフィールドを保存しますか?
サブクラスとスーパークラスの両方に、サブクラスの状態の一部として保存する必要のある変数が含まれています。
シリアル化でスーパークラスフィールドを保存しますか?
私のサブクラスはSerializableを実装していますが、私のスーパークラスは実装していません。シリアル化でスーパークラスのフィールドを保存しますか?
サブクラスとスーパークラスの両方に、サブクラスの状態の一部として保存する必要のある変数が含まれています。
シリアル化でスーパークラスフィールドを保存しますか?
それはSerializable.Hereない場合は、スーパークラスのフィールドをシリアル化することはできませんがJavaの直列のいくつかのルールの概要です:
そのクラスまたはそのスーパークラスがSerializable
を実装している場合にのみ、オブジェクトが直列化可能です(またはExternalizable
)インターフェイスです。
スーパークラスが存在しない場合でも、オブジェクトはシリアル化可能です(それ自体がSerializableインターフェイスを実装します)。しかし、Serializableインタフェースを実装していない直列化可能クラスの階層のfirstsuperclassは、引数なしのコンストラクタを持っていなければなりません(MUST)。これに違反すると、readObject()は実行時にjava.io.InvalidClassException
を生成します。
非直列化スーパークラスの引数なしコンストラクタは、オブジェクトが逆シリアル化されたときに実行されます。しかし、逆シリアル化されたオブジェクトは?デシリアライズ時にコンストラクタは実行されません。
クラスはシリアル化の時点で可視である必要があります。
すべてのプリミティブ型は直列化可能です。
一時的なフィールド(一時的修飾子付き)はシリアル化されません(つまり、保存または復元されません)。 Serializableを実装するクラスは、直列化をサポートしないクラスの過渡フィールド(例えば、ファイルストリーム)をマークします。
静的フィールド(静的修飾子付き)は直列化されません。
シリアライズ可能オブジェクトのメンバー変数が非シリアライズ可能オブジェクトを参照する場合、コードはコンパイルされますが、RumtimeExceptionがスローされます。スーパークラスがあるか `Serializable`ない場合
を使用して確認できます。 – Danijel
ソリューションをコピー&ペーストする場合は、ソースを提供してください(関心のある人はhttp://www.xyzws.com/Javafaq/what-are-rules-of-serialization-in-java/208) –
http://stackoverflow.com/questions/8632148/java-object-serialization-and-inheritance –