Java类继承自我引用类

时间:2017-11-20 07:52:41

标签: java oop generics inheritance tree

我正在尝试在java类中实现一个简单的Tree。但是,我希望另一个类扩展此Tree类。

我正在使树递归:

class Tree<T> {
    public T data;
    public List<Tree<T>> children;

    public Tree(T data){
        this.data = data;
    }
}

然而,说我做了这样的课程:

class WeightedTree<T> extends Tree<T>

它的孩子都是普通的树木,而不是加权树木。有没有办法用OOP原则来实现这个目标?

2 个答案:

答案 0 :(得分:2)

您可以这样做:

class Tree<T, SELF extends Tree<T, SELF>> {
    public T data;
    public List<SELF> children;
}

class WeightedTree<T> extends Tree<T, WeightedTree<T>> {}

如果需要实例化Tree,可以使用通配符:

Tree<String, ?> tree = new Tree<>();

或者您可以为TreeWeightedTree创建一个具有自我类型和单独子类的抽象基类。

答案 1 :(得分:0)

/* Package */ abstract class TreeBase<T, TREE_T extends TreeBase<T, TREE_T>> {
    public T data;
    public List<TREE_T> children;

    public TreeBase(T data) {
        this.data = data;
    }
}

public class Tree<T> extends TreeBase<T, Tree<T>> {
    public Tree(T data) {
        super(data);
    }
}

public class WeightedTree<T> extends TreeBase<T, WeightedTree<T>> {
    public WeightedTree(T data) {
        super(data);
    }
}