Ruby のStringIO は、Duck Typing

StringIO クラスは、IO クラスと継承関係はなく、
単に、read, write など、IO と同名の関数名を使っているだけ

これだけで、StringIO に対して、入出力操作を行うことで、
メモリファイルを扱うことができる

最近は、ガチガチの継承よりも、委譲やDuck Typing を使うことも多い。
宣言無しのinterface みたいなもの