私の質問には、具体的には Java、抽象クラス、および保護されたデータの使用が含まれます。すべてのデータを非公開にし、保護されたゲッター/セッターのみを使用する必要があると言われています。
ここで、クラスのカジュアルなユーザーによる直接操作からデータを保護したいこと、およびパブリック データ メンバーは一般的に疑わしい慣行であることを理解しています。「Java プロテクト フィールド vs パブリック ゲッター」( Java プロテクト フィールド vs パブリック ゲッター) を見てきましたが、まだ疑問があります。
protected int i;
抽象クラスでは以下よりも悪い:
private int i;
protected int geti();
protected void seti(int j);
子クラスに親/共通機能を提供するために抽象クラスが正確に存在し、保護されたスコープが子へのアクセスを提供することを意図している場合、私はマイナス面を見ていませんユーザーからデータを保護します。上記の質問で、ほとんどの回答は、一般にデータを公開ではなく非公開にする理由の問題に対処しているように見えることに注意してください。私は、子供が使用することを意図した抽象的な親に存在するデータに特に質問を集中しようとしています。これまでに聞いた唯一の合理的なコメントは、親で保護されたデータ (上記の int i など) を使用すると、子クラスで宣言されていない変数を参照するコードが子クラスに残るということです。あまり説得力のない引数です (基本クラスの共通保護データ メンバーを参照してください。) いつかアクセスを変更したくなるかもしれませんが、今度はインターフェースを尊重する必要があります。これは抽象クラスであり、常に 100% 拡張されることを意図しています。
ありがとう!本への特定のタイトル/ページ番号の参照は、「..基本的なJavaプログラミングテキスト...」への参照よりもはるかに役立ちます。
========================================= 10-13-2010
これは、保護されたデータに関する質問と同じくらい、抽象クラスに関する質問でした。OOP でデータを隠すことが良いことかどうかについての回答で、焦点がずれているように見えるのは残念です (回答: はい)。ここには、抽象クラスの性質、通常の非最終クラスとの違い、抽象親で使用するデータ項目の名前と型を固定することの利点など、多くの深みがあります。子クラス。ここには、革新と、抽象的な親クラスから子クラスの実装にまで拡張されたより大きな制御の可能性があると思います。私は、データ隠蔽の利点などの一般原則がドグマになり、イノベーションや新しいパターンやアイデアの開発を阻害する可能性があることを懸念しています。
貢献してくれたすべての人に感謝します。