我明白這個問題聽起來很奇怪,但我想知道爲什麼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