同僚と議論していたのですが、有識者の方にもご意見を伺いたく質問させていただきました。
個人的には「サブクラスにpublicメソッドを定義すること」はNGと考えています。
理由はポリモーフィズムが破壊される(?)からです。
ただし、スーパークラスのpublicメソッドをオーバーライドするためにサブクラスで同名のpublicメソッドを定義するのは問題ないと思いますので、正しくは「サブクラスにてスーパークラスには存在しないpublicメソッドを定義すること」がNGになります。
私自身オブジェクト志向をしっかりと理解している自信はないので、認識の間違いや他にも「こういう時はサブクラスにpublicメソッドを定義したほうがよい」といったケースがございましたらご教授いただけると嬉しいです。
どうぞよろしくお願いします。
追記
みなさまご回答ありがとうございました。
色々なご意見をいただき自信のプログラムの書き方を見直すきっかけにもなりました。
「トンカチをもつとなんでもクギに見える」とはまさにこのことですね。。
ベストアンサー悩ましかったのですが、maisumakunさんにさせていただきました。
「ポリモーフィズムが破壊される」の根拠をお願いします。
サブクラスを他のサブクラスと入れ替えて使う想定のコードがあるが、
あるサブクラスではそれが上手くいく一方で他のサブクラスに差し替えると動作しないような状況を想定していました。
サブクラスAにしかないhogeメソッドを定義し、それと代替する想定のサブクラスBにhogeメソッドがない(かつスーパークラスにもない)場合にサブクラスAのインスタンスでしか動作しなくなってしまうため「ポリモーフィズムが破壊される」のかなと考えていました
質問から外れますが、サブクラス以外に interface や メソッドオーバーロード でも ポリモーフィズム を実現できますよ。
https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%82%BA%E3%83%A0
shiracamusさん、ありがとうございます
ポリモーフィズムひとつとってもそれにまつわる色々な機能や実装方法があるのですね。
勉強しなくては...
回答4件
あなたの回答
tips
プレビュー