この質問はかなり奇妙に聞こえるかもしれませんが、なぜjava.io.Serializable
インターフェイスがクラスではなくインターフェイスとして正確に実装されているのでしょうか。
その点について考えさせられたのは、 /メソッドをオーバーライドすることについて話しているのに対し、定義上、それらをオーバーライドしないことです(つまり、これらのメソッドを既に実装しているオブジェクトのスーパータイプはありません)。readObject
writeObject
Serializable
したがって、クラスである場合は、デフォルトの/メソッドSerializable
を実装することができ、既存のクラスは、前述のメソッドを実際にオーバーライドすることができます。 readObject
writeObject
これが私の言葉を説明する機能しない回避策です:
public class Serializable implements java.io.Serializable {
private static final long serialVersionUID = 356223041512972356L;
protected void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
stream.defaultReadObject();
}
protected void writeObject(ObjectOutputStream stream) throws IOException {
stream.defaultWriteObject();
}
}
public class MyClass extends Serializable {
private static final long serialVersionUID = -5437634103734137046L;
@Override
protected void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
super.readObject(stream);
// custom readObject method
}
}
readObject
PS: /メソッドは私のものwriteObject
として宣言する必要があるため、提供された回避策は機能しません。private
protected