我正在阅读Java IO的基础知识,我看到,为了在类中使用自定义writeObject
函数,必须将其声明为私有。
private void writeObject(ObjectOutputStream oos);
然后,当我们打电话
oos.writeObject(myClassObject);
此函数在MyClass中查找私有writeObject方法并执行它。
我的问题是:如果这是真的,那么当一个函数可以调用另一个类的私有方法时,它会违反Data Abstraction概念吗?这个功能的原因是什么?
答案 0 :(得分:0)
我在这里大多做了一个有根据的猜测。
顺便说一下,序列化的工作原理在逻辑上与单个对象类相关联。继承它并没有多大意义,所以它被迫是私有的。
它确实违反了一些OO原则,但我可以在这种方法中看到理由。特别是因为序列化已经严重依赖于反射。
答案 1 :(得分:0)
是的,它违反了OO原则,就像序列化过程一般(例如,它能够在没有明显调用构造函数的情况下构造对象实例)。
关于如何使用内部欺骗和Reflection API的组合完成。