我正在尝试用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
的子类,它是否应该可以访问其父级的受保护字段?
感谢您的帮助。
答案 0 :(得分:3)
您只能通过与代码或子类型相同类型的引用访问protected
个成员。
在您的情况下也是如此,因为创建MutableTree
将允许客户端代码改变所谓的不可变Tree
。