[英]Java Class inheriting self-referencial class
I'm trying to implement a simple Tree in a java class. 我试图在Java类中实现一个简单的Tree。 However, I want another class to extend this Tree Class.
但是,我想要另一个类来扩展此Tree类。
I'm making the tree recursive like this: 我正在像这样递归树:
class Tree<T> {
public T data;
public List<Tree<T>> children;
public Tree(T data){
this.data = data;
}
}
However, say I make a class like this: 但是,说我做这样的一门课:
class WeightedTree<T> extends Tree<T>
it's children are all regular trees, not Weighted Trees. 它的孩子都是普通树,而不是加权树。 Is there a way of accomplishing this with OOP principles?
有没有一种方法可以通过OOP原理来实现?
You can do something like this: 您可以执行以下操作:
class Tree<T, SELF extends Tree<T, SELF>> {
public T data;
public List<SELF> children;
}
class WeightedTree<T> extends Tree<T, WeightedTree<T>> {}
If you need to instantiate Tree
, you can use a wildcard: 如果您需要实例化
Tree
,则可以使用通配符:
Tree<String, ?> tree = new Tree<>();
Or you can make an abstract base class with a self type and separate subclasses for Tree
and WeightedTree
. 或者,您可以创建一个具有自类型的抽象基类,并为
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.