简体   繁体   English

Java类继承自引用类

[英]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 . 或者,您可以创建一个具有自类型的抽象基类,并为TreeWeightedTree单独的子类。

/* 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM