3、提炼超类 几个类具有相同的功能时,就需要提炼出一个超类出来。如随着需求的变化,我们不但需要对四脚野兽(Animal)予以关注,还需要对鸟类(Bird)投注关怀,那么在Bird和Animal之上抽象出一个Creature类出来是再适合不过的了。
打开Animal.java,光标移至类名称Animal处:Ctrl+Shift+R->Introduce Superclass for “Animal” 调出提炼超类的对话框,如下图所示:
 图 20 提炼超类对话框 |
在Superclass name中指定超类名Creature,在Package中指定超类所在的包名,默认为当前类所在的包,按OK按钮,JBuilder创建Creature超类,并使Animal类继承这个超类:
代码清单 7 Creature超类
1. package myrefactor ; 2. 3. public class Creature 4. { 5. public Creature() 6. { 7. } 8. } |
Animal代码做如下调整
代码清单 8 提炼超类
1. package myrefactor ; 2. 3. public class Animal extends Creature 4. { 5. … 6. } |
由于Creature生成后并未编译,所以Animal类在编辑器中会提示语法错误,

出现在控制槽上。你可以通过重构信息窗口的

按钮编译重构相关的类以消除这个语法错误。本文后续内容还会碰到相似的情况,解决方法相同,将不再赘述。
4、提炼接口 假设我们需要为动物定义一些共同的习性,可以将类的若干方法提炼出来,用一个接口来表达。打开Animal.java,将光标移到类名Animal处:Ctrl+Shift+R->Extract Interface from Class “Animal”调出提炼接口对话框,如下所示:
 图 21 提炼接口对话框 |
·Interface name:接口名称,填入Habitable。
·Package:包名,接受默认值。
·Available methods:JBuilder将Animal类中所有的public方法列在该列表中,你可以选择需要将哪些方法抽取到接口中。
点击OK完成Habitable接口的提炼。JBuilder创建Habitable接口,并使Animal实现这个接口。
代码清单 9 Habitable接口
1. package myrefactor ; 2. 3. public interface Habitable 4. { 5. public void howl() ; 6. } |
Animal类调整如下:
代码清单 10 提炼接口
1. package myrefactor ; 2. public class Animal extends Creature implements Habitable 3. { 4. … 5. } |
假设你仅希望将类中的某个方法提炼到一个接口中,你可以直接将光标移至方法名处:Ctrl+Shift+R->Extract to Interface Method更直接地完成这个操作。