0

Bean クラス /encapsulation は、変数がプライベートであり、ゲッターとセッターがパブリックである必要があることを意味します。データが隠されているため、誰もこの変数の外部にアクセスできません。

私の質問は:`getter/setter メソッドを使用すると、外部クラスから変数にアクセス/設定できます。では、なぜその変数を非公開にする必要があるのでしょうか && どうすればこれがデータ非表示であるとわかりますか?

実際、私はこのようなプロジェクトをやっているだけなので、説明を得るのが好きです。間違いや不明な質問がありましたら、ご容赦ください。

誰かこれを説明してください。

前もって感謝します

4

3 に答える 3

2

私が考えたいくつかの理由:

  1. 変数へのアクセス方法を制御します。たとえば、無効な値のnull設定をsetter許可したり、読み取り専用変数のセッターをまったく許可したりできません。
  2. データ型などの変数の構造を変更し、setter定義getterを変更せずに保持できるため、クラスのすべてのユーザーに影響を与えることなく、内部の変更/リファクタリングを簡単に実行できます。
于 2012-04-10T08:43:40.000 に答える
1

getter / setter は、クラスの読み取り可能 / 書き込み可能 (または両方) のプロパティを定義します。private フィールドは、このプロパティの可能な内部表現の 1 つを宣言します。

プロパティ定義 (getter および setter) を使用して、このフィールドへのアクセスを定義したり、setter に制約を追加したりできます。コレクションの場合、変更不可能なバージョンのみを確実に提供できます。

また、共同作業するオブジェクトを変更せずに、リファクタリング中に値の取得を別のクラスまたはオブジェクトに委任することもできます。内部データ型を変更することもできます。たとえば、データ クラスを構築することもできます。

したがって、内部状態をカプセル化し、アクセスを提供します。

すべてのフィールドに getter と setter が必要なわけではないことに注意してください ;-)

于 2012-04-10T08:52:39.070 に答える
1

1) そうすることで、実際には変数の値を公開していますが、変数の値が計算される方法がカプセル化されます。これにより、必要に応じて、変数の値の計算方法をいつでも変更できます。

2) この表現方法は、「 Transfer Object」の設計パターンに役立ちます。つまり、クライアントが要求するたびに、各属性値を送信するのではなく、すべての変数を単一のオブジェクトに成形してクライアントに送信できるということです。

于 2012-04-10T09:13:16.707 に答える