>一応、抽象化されていますが、確かに分かりにくいかもしれません。
「分かりにくい」とか「一応、抽象化」といった話ではなくて、SEさんの出した
UpperStackでの継承の使い方は *間違っています*。
仮に実装継承による差分プログラミングを(いろいろの弊害は度外視して)認めると
しても、それが趣旨ならUpperStackをStack型の変数に代入してはいけないし、
スタックから要素を取得するメソッドはget()をオーバーライドしてはいけません。
getUpper()のような別のメソッドを作るべきです。
たとえ「リスコフの置換原則」とかの名前を知らなくても、ポリモルフィズムを
理解していれば、当然そう考えると思うんですが。
>FileWriterを例にした方がいいかもしれません。内容的には同じ意図です。
「同じ意図です」って、どういう意図でしょうか?
FileWriterがこういう継承関係になっている「意図」を理解しているのなら、
オセロ盤に棋譜を吐かせるのに、Boardクラスによりによって「ファイル名」を
渡すなどという設計がでてくるはずがないのですけど。
http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=1303&range=1