我正在尝试在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原则来实现这个目标?
答案 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<>();
或者您可以为Tree
和WeightedTree
创建一个具有自我类型和单独子类的抽象基类。
答案 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);
}
}