我知道,由于某种原因 BaseClass 是不可修改的,您希望最终得到一个更“有用”的 BaseClass 版本。
与其扩展 BaseClass,不如在 UniqueName 上委托给它:
public BaseClass{
public void usefulMethod() { ... }
public void lessUsefulMethod() { ... }
}
public UniqueName
{
private BaseClass baseClass;
public UniqueName(BaseClass baseClass){ this.baseClass = baseClass; }
public void usefulMethod() { return baseClass.usefulMethod(); }
public void moreUsefulMethod(){
...
baseClass.lessUsefulMethod();
...
}
}
不是从 BaseClass 类型转换为 UniqueName,而是使用将 BaseClass 作为参数的构造函数创建 UniqueName 的实例。
如果您需要保持 UniqueName 与 BaseClass 的“is-a”关系,您可以这样做。但不要忘记覆盖每个方法并将其委托给 baseClass 实例。
PS:如果您在序列化/反序列化中遇到对象替换的问题,ObjectInputStream 和 ObjectOutputStream 类有 replaceObject 和 resolveObject 方法,这允许我们替换序列化中的对象类型。