同じクラス内のオブジェクトのプライベート フィールドへのアクセス
Java では、プライベート アクセス修飾子により、フィールドの可視性がフィールドが属するクラスに制限されます。と宣言されています。ただし、よくある誤解は、この制限が同じクラス内のオブジェクトに適用されるということです。
次の例を考えてみましょう:
class Person { private BankAccount account; Person(BankAccount account) { this.account = account; } public Person someMethod(Person person) { // Why is accessing private field possible? BankAccount a = person.account; } }
person.account へのアクセスはなぜ可能ですか?
private 修飾子は、オブジェクトの内部状態を外部変更から保護するためにカプセル化を強制します。ただし、同じクラス内では、オブジェクトは同じ実装の詳細を共有します。これらは、クラスのプライベート フィールドとメソッドを認識しています。
Artemix は次のように説明しています。
「この考え方は、Person の実装が切り替わる可能性があるため、'外部の世界' が Person の内部プロセスを変更すべきではないということです。 (そして実装の違いを修正するには外側の世界全体を変更する必要がありますが、これはほぼ不可能です)。
同じクラス内のオブジェクトは同じ実装知識を共有するため、プライベート フィールドへのアクセスを許可します。これにより、クラスの内部状態に常に正しくアクセスして操作できるようになります。実装が変更された場合、クラス コードのみを更新する必要があり、クラス外のコードを変更する必要がなくなります。
したがって、OOP 設計では、プライベート フィールドにオブジェクト レベルのアクセスではなく、クラス レベルのアクセスが許可されます。クラスの実装内の一貫性を維持しながらカプセル化を促進します。
以上が同じクラス内のオブジェクトはどのようにしてプライベート フィールドにアクセスできるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。