我正在为特定域实现访问者模式,我有一些BaseVisitor
,即:
public class BaseVisitor {
someC someInstance;
visitA(...) {
...
}
visitB(...) {
...
}
}
和一个更改一个特定功能的类ExtendedVisitor
,即:
public class ExtendedVisitor extends BaseVisitor {
visitA(...) {
...
}
}
此ExtendedVisitor
具有visitA
的不同实现。
我想要做的是,当我在visitB
的{{1}}时,在特殊情况下,我想要使用BaseVisitor
的方法({{1} })而不是ExtendedVisitor
本身的常规visitA
。这很好,即:
visitA
现在显然,在BaseVisitor
中有许多visitB(...) {
if (...)
new ExtendedVisitor().visitA();
else
visitA();
}
方法,因此BaseVisitor
的{{1}}会调用它们(即这些方法的原始实现 - 在visit
)。问题是,此时我丢失了visitA
的实例(即它是ExtendedVisitor
)。这两个类有没有办法共享变量? IE浏览器。让孩子使用父变量?
答案 0 :(得分:1)
由于您正在调用新的ExtendedVisitor(),因此您正在创建该类的新实例,当然someInstance将为null。你可以创建一个像
这样的构造函数public ExtendedVisitor(someC someInstance ){
this.someInstance = someInstance
}
但这听起来并不是一个好主意......
根据您的设计,您迫使您的父类了解其子类的功能。我在这看到一个耦合问题。可能你应该重新思考你的代码,并以更好的方式使用继承和polimorfism。