[英]Java Class inheriting self-referencial class
我试图在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原理来实现?
您可以执行以下操作:
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
单独的子类。
/* 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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.