在JBuilder中通過重構將值域、方法在類的繼續體系中上推下移,是非常輕易的操作。這了說明這種重構功能,我們先來看下面的類繼續體系:
圖 15 類的繼續類圖
Animal類是Cat和Horse和父類,Animal中包含了兩個值域和一個方法。可以將Animal中的值域有選擇地下移到某個子類中。此外,還可以為Animal提煉超類和接口。
1、搬遷方法 打開Animal.Java並將光標定位到howl()方法處,通過Ctrl+Shift+R->Push Down Method調出下移方法對話框:
圖 16 下移方法
·Method:下移的方法。
·Keep as abstract in current class:表示在下移方法的同時將類轉為抽象類。
·Selected subclasses:列出當前類的所有子類,默認情況下方法將下移到所有子類中,我們取消Cat,僅將howl()下移到Horse中。
方法howl()中引用到Animal類的一個私有變量private int volume,在下移howl()後,該變量變為protected int volume。
上推和下移是相反的操作,負責將子類中的方法推到父類中去。保存並重新編譯工程,打開Horse.java將光標置到howl()方法處:Ctrl+Shift+R->Pull Up Method調出上推的對話框:
圖 17
上推方法
假如需上推的方法引用到了類中的其他方法,這些被引用的方法列在Select dependent members to moves列表中,一般情況下你需要將這些被引用的方法一起上移到父類中。
面向對象的一個重要特性即是子類共享父類的代碼,所以當你發現子類的方法或值域是共享性的代碼時,你就需要著手將這些代碼推到父類中去了,這樣代碼的復用性將得到提升。
2、搬遷值域 Animal類中有兩個值域:
1. protected int weight ;
2. protected int volume = weight ;
我們希望將volume下移到子類Cat中,光標定位到volume處:Ctrl+Shift+R>Push Down Field調出下移值域的對話框:
圖 18 下移值域
·Field:需下移的值域。
·Select subclasses:當前類的子類。在默認情況下,值域下移到所有的子類中,可以通過子類前的復選框作出選擇,這裡我們去除Horse類前的勾選,即僅下移到Cat中。
·Select dependent members to move:和下移值域相關的所有值域,JBuilder通過下移值域右邊的賦值語句找出所有關聯的值域,通過關聯值域前的復選框決定是否需要一起下移到子類。默認情況下,JBuilder將關聯的屬性weight隨volume一起下移。
按OK後完成下移。編譯工程,打開Horse.java,我們執行下移值域的反操作:上推值域到Animal類中。
光標定位在Horse.java的volume值域處:Ctrl+Shift+R->Pull Up Field調出上推值域對話框,如下圖所示:
圖 19
上推值域
點擊OK後,volume值域被上推到Horse父類Animal中。
提示:
遺憾的是,JBuilder上推值域並不會像下移值域一樣列出所有相關值域,只是簡單的將值域聲明代碼行上推到父類中。所以假如在值域的定義代碼行中引用了類中其它的值域,在上推到父為中時,將會發生語法錯誤,需要你手工解決。
QQread.com
推出各大專業服務器評測 Linux服務器的安全性能