この質問はかなり奇妙に聞こえるかもしれませんが、なぜjava.io.Serializableインターフェイスがクラスではなくインターフェイスとして正確に実装されているのでしょうか。
その点について考えさせられたのは、 /メソッドをオーバーライドすることについて話しているのに対し、定義上、それらをオーバーライドしないことです(つまり、これらのメソッドを既に実装しているオブジェクトのスーパータイプはありません)。readObjectwriteObjectSerializable
したがって、クラスである場合は、デフォルトの/メソッドSerializableを実装することができ、既存のクラスは、前述のメソッドを実際にオーバーライドすることができます。 readObjectwriteObject
これが私の言葉を説明する機能しない回避策です:
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
}
}
readObjectPS: /メソッドは私のものwriteObjectとして宣言する必要があるため、提供された回避策は機能しません。privateprotected