覆盖方法内部行为

时间:2013-05-17 16:32:15

标签: java design-patterns

有一个实现方法A的类doBlah。我有一个B类,它是A的子类,并且有一个@Override方法doBlah。在B.doBlah中执行一些简单的操作后,我调用了A.doBlah

A.doBlah调用静态方法C.aStaticMethod

A和C是我无法修改的外部库的一部分。

我希望CC.aStaticMethod代替A.doBlah调用静态方法C.aStaticMethod。使用任何设计模式/黑客都可以吗?

[编辑] 我确实有A的源代码,我可以将它们中的文件包含到我的代码中并根据需要修改等。但是,我无法修改A包。

1 个答案:

答案 0 :(得分:3)

如果您无法修改AC,并直接致电A,则答案为

另一方面,如果您不需要直接调用A.doBlah,则可以覆盖它的行为(假设方法不是final),你自己的班级,并打电话给CC.aStaticMethod

如果你有权访问源代码,你可以做一个非常非常丑陋的黑客攻击:

在与原始包完全相同的包中创建一个类A,并修改方法doBlah以调用您需要的内容。

请记住,这有一些缺点,即如果A属于外部库,则无法知道对该库的更新是否会破坏您的代码,因为您'我将运行较早版本的A。 这基本上就是说这种方法可以迅速转变为维护噩梦。