-
28-09-2019 - |
質問
2つの派生クラスが使用する関数がありますが、3番目のクラスはそうではありませんが、3つの派生クラスの1つが使用していない場合でも、ベースクラスに残すことは理にかなっていますか?
3番目のクラスを許可することを考えることができる唯一の方法は、基本的にベースに由来する中間クラスを作成することです。次に、共通関数を使用する2つは2番目のクラスから派生します。
3番目のクラスが関数を使用するのを防ぎながら、それを使用することになっている2つに使用することは可能ですか?
それはただ船外に出るように思えますか?私は3番目のクラスから関数を呼び出すことを「試みない」限り、それは問題ではないはずです、それをすべて防ぐ方法があるかどうか興味がありましたたくさんの手間がかからずに一緒に。
解決
これを直接行う方法はありません。基本的に、サブクラスの場合、サブクラスはベースクラスのより具体的なバージョンであると言っています。
この場合、「サブクラスはベースクラスのより具体的なバージョンです。 except for the fact that it shouldn't be able to touch XXX
「。それは本質的に、 リスコフ代替原則.
これを処理する最良の方法は、階層に2番目のベースクラスを追加することです。これは、あなたが言及した解決策だと思います。
基本的に、階層を作ります:
base
| \---- subclass without feature available
|
\--base+feature
\--subclass one with specific feature
\--subclass two with specific feature
他のヒント
この関数を仮想にすることができます。次に、3番目のクラスで関数をオーバーライドし、例外をスローします。開発者が3番目のクラスで機能を使用することを妨げます。
所属していません StackOverflow