2 回答
TA贡献1856条经验 获得超5个赞
考虑使用适配器或装饰器模式,并使用组合而不是继承。例如:
public class B {
private final A a;
private final MyCustomClass myCustomClass;
B(A a) {
this.a = a;
myCustomerClass = new MyCustomClass(a.getMyClass());
}
public void doSomething() {
a.doSomething(); // updates the state of a.myClass.
myCustomerClass.doSomething(); // use the change of a.myClass to do more stuff
}
}
public class MyCustomClass {
private final MyClass myClass;
private String verySpecialString;
public MyCustomClass(MyClass myClass) {
this.myClass = myClass;
}
public void doSomething() {
verySpecialString = "Hey!" + myClass.getSomeResult();
}
}
TA贡献1906条经验 获得超3个赞
一般而言,在应用程序、库等 for... 中,某些组件被设计为可扩展(因为虽然是 for),而某些其他组件实际上并未被设计为可扩展。
但是修改一个现有的组件通常不是扩展应用程序行为的方式。
因为现有的组件通常不是为了修改而设计的。他们的实际逻辑/处理可能会从一个版本到另一个版本发生很大变化。这些可能会从源代码或其他任何东西中删除......因此您将很难将原始源的更新合并到应用程序修改后的实现的源代码中。
长话短说:应用程序可能允许扩展,但在这种情况下,它也提供了扩展点,您不能以任何方式更改任何类。
如果您想扩展原始源代码的某些部分,您必须知道实际应用程序是否旨在扩展,如果是,如何扩展。
如果它不是为扩展而设计的,您应该接受应用程序更新可能不会集成(或难以集成)到修改后的应用程序中。
添加回答
举报