1

我有点困惑,我认为这应该工作。它只是一个父类和一个子类,我无法弄清楚为什么 a) eclipse 抱怨,b) 在实例化对象中没有调用被覆盖的方法。

public class Selector {

private Node rootNode;
private Grid childGrid;

public Selector(){
    super();
}

public Selector(Grid childGrid){
    this();
    this.childGrid = childGrid;
}

public Selector(Node rootNode,Grid childGrid){
    this();
    this.rootNode = rootNode;
    this.childGrid = childGrid;
}

private ArrayList<ArrayList<String>> filter(ArrayList<String> keys){
    return null;
}

private ArrayList<ArrayList<String>> innerEneryOrder(ArrayList<ArrayList<String>> children){
    return children;
}

private ArrayList<ArrayList<String>> outerEneryOrder(ArrayList<ArrayList<String>> children){
    return children;
}}

好的,这是派生类:

public class StandardSelector extends Selector {

    @Override
private ArrayList<ArrayList<String>> filter(ArrayList<String> keys){
    ArrayList<ArrayList<String>> ret = new ArrayList<>();
    for (String s: keys){
        ArrayList<String> aL = new ArrayList<String>();
        aL.add(s);
        ret.add(aL);
    }
    return ret;
}}

那么,问题出在哪里?

4

2 回答 2

0

filter()将方法的可见性更改为protected在 Super 类中,以便可以覆盖它。私有方法不能被覆盖。在您的情况下,您刚刚为子类创建了一个新方法,它与基类方法无关filter()

于 2013-09-22T22:23:54.197 回答
0

增加filter方法的可见性,以便可以覆盖它。

JLS 6.6-5

私有类成员或构造函数只能在包含成员或构造函数声明的顶级类(第 7.6 节)的主体内访问。

因此,更换

private ArrayList<ArrayList<String>> filter(ArrayList<String> keys){

protected List<List<String>> filter(List<String> keys) {
于 2013-09-22T21:10:23.317 回答