メソッドのプッシュダウン
次に継承クラスでのリファクタリング機能の利用例として、プッシュダウン機能を説明します。プッシュダウンとは、スーパークラスのフィールドやメソッドをサブクラスに移動することで、メソッドを移動する場合、単純に移動する方法と、スーパークラスにそのメソッドのabstract宣言を残す方法の2通りがあります。今回は、先ほど作成したkyufukin()メソッドを用いて、後者を試してみましょう。
パッケージ・エクスプローラーで[HelloStaff]クラスの[kyufukin()]を選択して[リファクタリング(T)]-[プッシュダウン(D)]を実行します。
![図40:「kyufukin()」を選択して[リファクタリング]-[プッシュダウン]を実行](http://cz-cdn.shoeisha.jp/static/images/article/3930/8-40s.gif)
「プッシュダウン」ウィンドウが表示されますので、メンバー[kyufukin()]のチェックボックスがオンになっているのを確認します。アクションが「プッシュダウン」になっていますので、このまま実行するとメソッドがサブクラスに単純に移動してしまいます。そこで[アクションを設定(T)]をクリックします。
「アクションの設定」ウィンドウが表示されますので、[選択したメンバーのアクション(A)]を[abstract宣言を残す]に変更してから[OK]をクリックします。
![図42:[abstract宣言を残す]に変更して[OK]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/3930/8-42.gif)
「プッシュダウン」ウィンドウに戻りますので、メンバー[kyufukin()]のアクションが[abstract宣言を残す]になっているのを確認して[プレビュー(W)]をクリックします。
プレビュー画面に切り替わります。まず今回の場合、プッシュダウンにより可視性の問題が起こることがわかります。よって、定数「TAGAKU」とクラス変数「age」の可視性を変更する必要があり、Eclipseは「privateからprotectedに変更しても良いか?」と、確認を求めているわけです。今回はそのとおりにするとして、[継続(T)]をクリックします。
すると、実際の変更のプレビュー画面に切り替わります。今回の場合、スーパクラスとサブクラスのそれぞれに変更が加わるので、[実行される変更]で1つずつ確認しましょう。まず、サブクラスである「HelloEmp」には新たにkyuhukin()メソッドが追加されています。なお、スーパークラスに「abstract宣言を残す」としたので、オーバライドになります。
次に、[実行される変更]でスーパークラスである「HelloStaff」をクリックします。すると、先ほど指摘があった定数の変数のprivateへの変更に加えて、HelloStaffクラスが抽象(abstract)クラスに定義変更されていることがわかります。これは、「abstract宣言を残す」とした為です。
ソース表示をスクロールダウンして、スーパークラスの後半の変更を確認しましょう。「abstract宣言を残す」とした結果、kyofukin()メソッドが抽象メソッドに変更されています。確認できたら[OK]をクリックしてプッシュダウンを実行します。
エディタービューに戻るので、プレビューの通りに2つのクラスが変更されていることを確認します。パッケージ・エクスプローラーにも変更が反映しています。
エディタービューのファイル名タグをウィンドウ下方向へドラックすることで、2つのエディタを上下に並べて開くことができます。

![図41:確認して[アクションを設定]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/3930/8-41s.gif)
![図43:確認して[プレビュー]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/3930/8-43s.gif)
![図44:確認して[継続]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/3930/8-44s.gif)


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