动机
如果你看见各个子类中的函数有共同行为,第一个念头应该是将共同行为提炼到一个独立函数中,然后将这个函数提升到超类。对构造函数而言,它们彼此的共同行为往往就是“对象的建构”,这时候你需要在超类中提供一个构造函数,然后子类都来调用它。很多时候,子类构造函数的唯一动作就是调用超类构造函数。这里不能运用Pull Up Method,因为你无法在子类中继承超类构造函数。
如果重构过程过于复杂,你可以考虑转而使用Replace Constructor with Factory Method。
做法
- 在超类中定义一个构造函数。
- 将子类构造函数中的共同代码搬移到超类构造函数中。
- 将子类构造函数中的共同代码删掉,改而调用新建的超类构造函数。
- 编译,测试。
范例
下面是一个表示“雇员”的Employee类和一个表示“经理”的Manager类:
class Employee...
protected String _name;
protected String _id;
class Manager extends Employee...
public Manager(String name, String id, int grade