クラスを「オープン」に設計するべきではないのはなぜですか?
さまざまなStack Overflowの質問や他の人のコードを読むとき、クラスを設計する方法の一般的なコンセンサスは閉じられています。これは、JavaおよびC#のデフォルトでは、すべてがプライベートであり、フィールドがfinalであり、一部のメソッドがfinalであり、クラスがfinalでさえあることを意味します。 この背後にある考え方は、実装の詳細を隠すことです。これは非常に良い理由です。ただしprotected、ほとんどのOOP言語とポリモーフィズムの存在により、これは機能しません。 クラスに機能を追加したり変更したりするたびに、私は通常、あらゆる場所に配置されたプライベートおよびファイナルによって妨げられています。ここでは、実装の詳細が重要です。実装を取得して拡張し、結果が何であるかを十分に理解しています。ただし、プライベートおよび最終的なフィールドとメソッドにアクセスできないため、3つのオプションがあります。 クラスを拡張せず、より複雑なコードにつながる問題を回避してください クラス全体をコピーして貼り付け、コードの再利用性を損なう プロジェクトを分岐する これらは良い選択肢ではありません。なぜprotectedそれをサポートする言語で書かれたプロジェクトで使用されないのですか?一部のプロジェクトがクラスからの継承を明示的に禁止しているのはなぜですか?