C++とかJavaとか,その手のプログラミング言語には大抵 “ public: protected: private: “のようなメンバに対するアクセス制限を明記する手段が提供されていて,何を何処まで見せるかを明記できる.
アクセス制限の範囲ってのは同時に,元のクラスでの変更が影響する範囲でもあるわけで, “public “のモノのインタフェースとか振る舞いの変更は慎重にしなきゃならない.一方で,自分にしか見せない “private “のモノなら,少なくとも影響範囲がprivateに収まる範囲なら,どんな変更も好き勝手に出来る( C++ の “friend ” の存在が多少厄介だが).
じゃあ,残った “protected “はどうなのかっていうと,外から見えないからどうでも良いような気もするけど,実際には “public “と同等の慎重さが必要になる.なせかというと,派生クラスから見ると,ほかのクラスのpublicも,基底クラスのprotectedも,自分以外の誰かが「公開」してるモノに変わりはないからだ.
という,プログラマ的なprotectedの捕らえ方からすると,アクセス制限がかかって protect されている領域であっても,本質的にprivateなモノをそこに書き散らすのはどうにも許しがたいものがある.