java - 替代似乎不起作用

  显示原文与译文双语对照的内容
102 3

我有点困惑,我觉得这应该可以。 它只是一个父和 childclass,我不知道为什么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;
}}

那么,问题在哪里?

时间: 原作者:

115 3

增加 filter 方法的可见性,以便可以重写它。

来自 JLS 6.6 -5

只能在包含成员或者构造函数声明的顶级类( §7.6 )的主体中访问 private 类成员或者构造函数。

因此,替换


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


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

原作者:
75 4

filter() 方法的可见性更改为超类中的protected,以便可以重写它。 private 方法不能重写。 在你的例子中,你刚刚为子类创建了一个新方法,它与基类 filter() 方法无关。

...