Object oriented programming does make it easy for a simple logic but does not fit in the real world. When inheriting, keeping track of the stuffs happening in the parent can make it hard to fit it thought, and even worse some stuff declared might go unused.
Good story discussing OOP and Rust in story form.
By the way, there can be inner in rust as well. See serde-json, even though writer is considered inner, it could be named anything and hidden from user.