簡體   English   中英

為什么ObjectOutputStream.readObject()訪問MyClass.readObject()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM