我明白这个问题听起来很奇怪,但我想知道为什么java.io.Serializable
接口已经被精确地实现为一个接口,而不是一个类?为什么java.io.Serializable不是一个类?
是什么让我想到这一点,是我们正在谈论首要的readObject
/writeObject
方法,而根据定义,我们不覆盖他们(即没有超类型我们Serializable
对象已经实施这些方法)。
因此,如果Serializable
将是一个类,它可能已经实现了默认readObject
/writeObject
方法,然后exenting类可能已经能够真正覆盖说的方法。
下面是一个不工作变通方法,说明了我的话:
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
而我是protected
。
可能的重复[为什么readObject和writeObject是私有的,为什么我会明确写入瞬态变量?](http://stackoverflow.com/questions/7467313/why-are-readobject-and-writeobject-private-and - 为什么会我写的瞬态变种)resp答案之一:http://stackoverflow.com/a/7472723 – Puce 2013-03-05 16:04:46
方法可能已被放入'对象',就像'克隆'和' Cloneable'。但是,看看为什么'Serializable'不应该是一个类,为什么'Cloneable'是一个糟糕的主意。 – 2013-03-05 18:15:04
这就是为什么任何接口不是一个类的原因。以免限制你可以继承的东西。 – EJP 2013-03-05 23:02:43