Java が複雑なデータ構造をどのようにシリアライズするか: 入れ子のコレクションや継承階層から、循環を含むオブジェクトグラフまで。なぜシリアライズが
Map<String, List<Book>> で機能するのか、
List<Animal> で子クラスの実型がどのように保持されるのか、循環時に参照メカニズムが何をするのか、そしてどんな落とし穴があるのかを解説します。さらに、
ObjectOutputStream/
ObjectInputStream の役割、
writeObject/
readObject メソッド、
serialVersionUID フィールド、および修飾子
transient についても扱います。