以前、privateは不要、という事を言ったことがあります。
privateというのはアクセス修飾子のことです。
privateはなくして、protected扱いにする。
そして関数はすべてvirtualがついたものとする。
これがprivate不要論の趣旨です。
要するに、派生クラスは基底クラスを自由に扱えるべきだ、という考えです。
Aというクラスに機能を追加したBというクラスを作ることができる、という説明を見て、
機能追加したくても、アクセス修飾子でガードされれていたら手が出ない、と思ったからです。
しかし、これは大きな間違いでした。
正しいアプローチとしては、基底クラスそのものを書き換えてprivateを外したりsetterを作ればいいのです。
もし、ソース編集の権利がなければ、再作成するしかないのです。
派生ってのは関数の引数と同じようなものと考えられます。
引数にない項目に対しては変更できないと同じように、
書き換えられるもの、書き換えられないものというのが派生した場合にも存在するわけです。
ただ、private不要論の発端だけは間違ってないような気がしていました。
そのきっかけがC#のsealedで、派生禁止というアプローチがあったんだ!と気付きました。
(Javaの方が先だと思うけど、私が知った順序なので。)
基底クラスはどのように派生して使われるべきか設計段階で盛り込む必要があります。
だったら、派生のことを考えていないクラスに対して派生するのがそもそもおかしいわけです。
ということで、デフォルトでは派生禁止論を推します。
#仮に派生可能というキーワードがあったらなんだろう…deriveable ??