別の動作から始めましょう。メソッド/変数をプライベートとして宣言した場合でも、同じクラスの別のインスタンスがそれにアクセスできます。それは私がそれと一緒に暮らすことができるのは大丈夫です。私はこれらをインスタンスプライベートではなくクラスプライベートと呼んでいます。
ここで質問の部分です。たとえば、実行時に、this
クラス内のすべてのString変数がnullでないことを確認できるようにしたいので、nullの場合は、文字列「NULL」に変更する必要があります。
リフレクションを使用して変数を実行し、それらの値を取得できます。しかし、クラスを拡張してプライベート変数または保護された変数を追加すると、基本クラスはそれらにアクセスできなくなります。変数をsetAccessible
使用する前に、変数を使用する必要があります。
それで、基本クラス(スーパークラス)がそのサブクラスからプライベート/保護された変数にアクセスできない理由を私に説明してください。それはそのサブクラスなので、私はそれを取得しません。この背後にある考え方は何ですか?
スーパークラスはそのサブクラスについて知らないはずですが、私の例ではそれは理にかなっていますね。
このようにサブクラスを制限できない、または制限すべきではないからですか?
更新: 回答に基づいて、私も知りたいです:同じクラスから別のインスタンスのプライベート変数にアクセスしないのはなぜカプセル化の違反と見なされないのですか?