我有点困惑,我认为这应该有效。它只是一个父类和一个子类,我无法弄清楚为什么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;
}}
那么,问题在哪里?
答案 0 :(得分:0)
提高filter
方法的可见性,以便可以覆盖它。
私有类成员或构造函数只能在包含成员或构造函数声明的顶级类(第7.6节)的主体内访问。
因此,请替换
private ArrayList<ArrayList<String>> filter(ArrayList<String> keys){
与
protected List<List<String>> filter(List<String> keys) {
答案 1 :(得分:0)
将超级类中filter()
方法的可见性更改为protected
,以便可以覆盖它。私有方法无法覆盖。在您的情况下,您刚刚为子类创建了一个新方法,它与基类filter()
方法无关。