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スーパー クラスに変更して、オーバーライドできるようにします。プライベート メソッドはオーバーライドできません。あなたの場合、サブクラスの新しいメソッドを作成したばかりで、基本クラスのfilter()メソッドとは関係ありません。

于 2013-09-22T22:23:54.197 に答える