覆盖似乎不起作用

时间:2013-09-22 21:07:09

标签: java override superclass

我有点困惑,我认为这应该有效。它只是一个父类和一个子类,我无法弄清楚为什么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;
}}

那么,问题在哪里?

2 个答案:

答案 0 :(得分:0)

提高filter方法的可见性,以便可以覆盖它。

来自JLS 6.6-5

  

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

因此,请替换

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

protected List<List<String>> filter(List<String> keys) {

答案 1 :(得分:0)

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