从父类调用扩展类的方法,使用扩展类保持父变量的实例

时间:2016-11-15 12:57:04

标签: java

我正在为特定域实现访问者模式,我有一些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浏览器。让孩子使用父变量?

1 个答案:

答案 0 :(得分:1)

由于您正在调用新的ExtendedVisitor(),因此您正在创建该类的新实例,当然someInstance将为null。你可以创建一个像

这样的构造函数
public ExtendedVisitor(someC someInstance ){
   this.someInstance = someInstance
} 

但这听起来并不是一个好主意......

根据您的设计,您迫使您的父类了解其子类的功能。我在这看到一个耦合问题。可能你应该重新思考你的代码,并以更好的方式使用继承和polimorfism。