質問

大まかに言えば、リスコフ置換原則は、ユーザーに影響を与えることなく、派生クラスを基本クラスの代わりに使用できると述べています。基本クラスが抽象クラスの場合、つまり基本クラスのインスタンスを使用しているユーザーがいない場合でも、リスコフの継承制限は派生クラスに適用されますか?

役に立ちましたか?

解決

あなたが特定のクラスをインスタンス化することができないからといって、あなたがそれを使用することができないことを意味するものではありません。このシナリオでは、呼び出し元のコードは、それが動作する契約の定義として抽象基本クラスを使用しています。その意味で、基本クラスから派生するすべてのクラスは、ベースクラスによって定義されたインタフェースに対して交換可能であるべきで、そうですリスコフは依然として適用されます。実際には、これはあなたには、いくつかの一般的な振る舞いを持つクラスのコレクションの抽象基本クラスを持ってする理由1主な理由です - あなたは、基本クラスのインターフェイスの面で操作を定義し、その派生クラスを気にすることはできませんあなたは、実際に動作しています。

他のヒント

はい、呼び出し側は常にこの操作を行うことができますのでます:

BaseAbstractClass instance = new DerivedClass();

抽象クラスは、すべてのLSPと競合しません。多くの人々は、LSPの精神に違反するクライアントコードから「新」を直接使用することを検討してください。あなたの両方をインスタンス化したオブジェクトを使用する場合は、その実装に密接に結合している、とあなたはできません「代替」それは全く。

オブジェクトの工場を経て作成されたか、具体的なタイプは、さまざまな状況で必要とされているかについて意思決定を行う上で焦点を合わせることができるリポジトリのいくつかの種類によって作成された後、引数として、あるいは依存性注入を経由して渡さを持つ考えてみます。

要するに、そうです。LSP は基本的に次のものに適用されます 全て 公的継承。基本クラスが抽象クラスであるという事実は変わりません。基本クラスはインターフェイスを定義し、すべての正当な派生クラスはそのインターフェイスのすべての要件を満たさなければなりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top