フィールドのカプセル化
「フィールドのカプセル化」機能は、指定したフィールドをprivateにすると共に、このフィールドへのアクセスをチェックし、GetterおよびSetterを経由していないものがあれば書き換えるリファクタリング機能です。
では、この機能を試してみましょう。ソースエディタまたはパッケージエクスプローラでHelloStaffクラスのageフィールドを選択状態にします。
メニューの[リファクタリング(T)]‐[フィールドのカプセル化(S)]を実行します。
「フィールドのカプセル化」ウィンドウが表示されます。今回は変更しないので、このまま[プレビュー(W)]をクリックします。
なお、「setterとgetterの使用」を「フィールド参照の保持」に変更することも可能です。また、今回の対象であるageフィールドにはすでにsetterとgetterがあるため選択不可になっていますが、存在しない場合はこの処理で自動作成することができるので、その挿入位置やアクセス修飾子を設定します。また、異なる名前のsetterやgetterを作成することもできます。
すると、プレビュー画面に切り替わります。今回の場合も、スーパークラスとサブクラスのそれぞれに変更が加わるので、[実行される変更]で1つずつ確認しましょう。
まず、サブクラスであるHelloEmpのkyuhukin()メソッドの内容です。ageフィールドを直接参照している2カ所がgetter経由に書き換えられることが分かります。
次に、[実行される変更]でスーパークラスであるHelloStaff.javaをクリックします。HelloStaffクラスのコンストラクターのageフィールドを直接設定している箇所がsetter経由に書き換えられること、ageフィールドのアクセス修飾子がprotectedからprivateに変わることが分かります。確認できたら[OK]をクリックしてカプセル化を実行します。
エディタービューに戻るので、プレビューのとおりに2つのクラスが変更されていることを確認します。
「フィールドのカプセル化」ウィンドウのところで説明したとおり、「フィールドのカプセル化」処理はsetterとgetterが存在しない場合に自動作成することができます。その意味では、前回説明した「GetterおよびSetterの生成機能」を含んでいるとも言えますが、細かい指定はできるので、先に「GetterおよびSetterの生成機能」で生成しておく方が良いでしょう。


![図28:[リファクタリング]‐[フィールドのカプセル化]を実行](http://cz-cdn.shoeisha.jp/static/images/article/4088/9-28s.gif)
![図29:[プレビュー]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/4088/9-29s.gif)

![図31:スーパークラスの変更を確認して[OK]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/4088/9-31s.gif)