![](/img/trans.png)
[英]Why does ObjectOutputStream.readObject() return object of type Object and not object of type I wrote it in?
[英]Why does ObjectOutputStream.readObject() access MyClass.readObject()
我正在閱讀Java IO的基礎知識,我看到,為了在類中使用自定義writeObject
函數,必須將其聲明為private。
private void writeObject(ObjectOutputStream oos);
然后,當我們打電話
oos.writeObject(myClassObject);
此函數在MyClass中查找私有writeObject方法並執行它。
我的問題是:如果這是真的,那么當一個函數可以調用另一個類的私有方法時,它不會違反Data Abstraction概念嗎? 這個功能的原因是什么?
我大多在這里做一個有根據的猜測。
序列化的工作方式在邏輯上與單個對象類相關聯。 繼承它並沒有多大意義,所以它被迫是私有的。
它確實違反了一些OO原則,但我可以在這種方法中看到原因。 特別是因為序列化已經嚴重依賴於反射。
是的,它違反了OO原則,就像序列化過程一般(例如,它能夠在沒有明顯調用構造函數的情況下構造對象實例)。
至於方法,它是使用內部技巧和Reflection API的組合完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.