2013-09-22 5 views
1

Я немного смущен, я думал, что это должно сработать. Его просто родительский и дочерний класс, я не могу понять, почему а) затмение жалуется, и б) переопределенный метод не вызывается в экземпляре объекта.Переопределение не работает

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

Увеличьте видимость метода filter, чтобы его можно было переопределить.

От JLS 6.6-5

Член частного или конструктора класса доступен только внутри тела класса верхнего уровня (§7.6), покрывающее заявление члена или конструктора.

Поэтому заменить

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

с

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

Изменение видимости метода filter() к protected в супер классе, так что может быть отменено. Частные методы не могут быть отменены. В вашем случае вы только что создали новый метод для подкласса, он не имеет никакого отношения к методу базового класса filter().

Смежные вопросы