2017-11-15 12 views
1

Serializableを実装するクラスを拡張する場合は、そのクラスもSerializableを実装する必要がありますか?私が持っている場合例えばSerializableを実装するクラスの拡張

public class classToBeExtended implements Serializable 

はその後、これは十分でしょうか?

public class classThatWillExtend extends classToExtended 

これを行う必要はありますか? Javadocパー

public class classThatWillExtend extends classToExtended implements Serializable 
+0

'List'を実装するクラスを拡張する場合、サブクラスが' List'でもあることをもう一度宣言する必要がありますか? 'Serializable'ではなぜそれが違うのですか? –

答えて

2

:クラスのスーパークラスのいずれかが、その後のサブクラスでもそのインターフェイスを実装し、指定されたインタフェースを実装する場合は直列化可能クラスの

すべてのサブタイプは

+1

これはやや誤解を招きます: 'Serializable'を実装しているクラスのすべてのサブタイプも' Serializable'を実装しています。実際にシリアル化できるかどうかについては何も言いません。 –

+0

@Andy Turnerよく分からない。 Javadocステートメントからは、インターフェイスを実装する必要なく、サブクラスがシリアライズ可能であることを意味するはずです。少なくともそれは私がそれをどのように読んでいるかである。 – tsolakp

+2

'Serializable'を実装することは必須であるが、*が*シリアライズ可能であるための条件ではありません。 'Serializable'を実装するクラスに直列化不可能な型のフィールドを追加することができます。これらがnullでない場合(参照の実行時の型が直列化できない場合)、直列化は失敗します。 –

2

直列化可能です。そのため、Serializableクラスのサブクラスは、Serializableを実装することを明示的に宣言する必要はありません。彼らはだから宣言しますが、それは違いはありません。

他の意味は、Serializableクラスを拡張する場合、そのサブクラスが実際には直列化可能であることを確認することです。たとえば、非逐次化可能型のフィールドであるtransientを追加しないでください。ただし、それをサポートするために必要なメソッドを追加する準備ができていなければなりません。

関連する問題