为什么ObjectOutputStream.readObject()访问MyClass.readObject()

时间:2015-07-16 09:21:47

标签: java objectoutputstream

我正在阅读Java IO的基础知识,我看到,为了在类中使用自定义writeObject函数,必须将其声明为私有。

private void writeObject(ObjectOutputStream oos);

然后,当我们打电话

oos.writeObject(myClassObject);

此函数在MyClass中查找私有writeObject方法并执行它。

我的问题是:如果这是真的,那么当一个函数可以调用另一个类的私有方法时,它会违反Data Abstraction概念吗?这个功能的原因是什么?

2 个答案:

答案 0 :(得分:0)

我在这里大多做了一个有根据的猜测。

顺便说一下,序列化的工作原理在逻辑上与单个对象类相关联。继承它并没有多大意义,所以它被迫是私有的。

它确实违反了一些OO原则,但我可以在这种方法中看到理由。特别是因为序列化已经严重依赖于反射。

答案 1 :(得分:0)

是的,它违反了OO原则,就像序列化过程一般(例如,它能够在没有明显调用构造函数的情况下构造对象实例)。

关于如何使用内部欺骗和Reflection API的组合完成。