我知道这个问题听起来很奇怪,但我想知道为什么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
}
}
PS:提供的解决方法不起作用,因为readObject
/writeObject
方法必须声明为private
while mine are protected
。