Я пытаюсь реализовать рекурсивную древовидную структуру с произвольными ключами в Java.По сути, я хочу иметь Tree<X,Y>
, который содержит X
и более (под) деревья, проиндексированные набором Y
с.Тем не менее, я думаю, что поскольку деревья будут использоваться для индексации данных в файле только для чтения, само дерево должно быть доступно только для чтения.Итак, для их создания я создал подкласс MutableTree
, который должен позволять операции редактирования для Tree
.
. Вот мой код:
public class Tree<C,K> implements Serializable {
protected C content;
protected java.util.HashMap<K, Tree<C,K>> nexts;
protected Tree () {}
public C getContent() {
return content;
}
public java.util.Iterator<K> getKeys () {
return nexts.keySet().iterator();
}
public Tree<C,K> descend(K key) {
return nexts.get(key);
}
}
И дляMutableTree
:
public class MutableTree<C,K> extends Tree<C,K> {
public MutableTree (Tree<C,K> par) {
super();
this.content = par.content;
this.nexts = par.nexts;
}
public MutableTree () {
super();
}
public void setContent (C c) {
this.content = c;
}
public MutableTree<C,K> addKey (K k) {
MutableTree<C,K> noo = new MutableTree<C,K>();
nexts.put(k, noo);
return noo;
}
public boolean delKey (K k) {
return (nexts.remove(k)!=null)?true:false;
}
}
Этот фрагмент не компилируется, вместо этого он решил жаловаться, что Tree.content
и Tree.nexts
защищены.Как видите, они действительно есть.Однако, поскольку MutableTree
является подклассом Tree
, не должен ли он иметь доступ к защищенным полям своих родителей?
Спасибо за любую помощь.