泛型继承

时间:2010-12-02 01:56:13

标签: java generics inheritance tree compiler-errors

我正在尝试用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.contentTree.nexts受到保护。如你所见,它们的确如此。但是,由于MutableTreeTree的子类,它是否应该可以访问其父级的受保护字段?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您只能通过与代码或子类型相同类型的引用访问protected个成员。

在您的情况下也是如此,因为创建MutableTree将允许客户端代码改变所谓的不可变Tree

相关问题