继承自引用类的Java类
我试图在java类中实现一个简单的树。但是,我需要另一个类来扩展这个树类 我让树递归如下:继承自引用类的Java类,java,oop,generics,inheritance,tree,Java,Oop,Generics,Inheritance,Tree,我试图在java类中实现一个简单的树。但是,我需要另一个类来扩展这个树类 我让树递归如下: class Tree<T> { public T data; public List<Tree<T>> children; public Tree(T data){ this.data = data; } } class WeightedTree<T> extends Tree<T> clas
class Tree<T> {
public T data;
public List<Tree<T>> children;
public Tree(T data){
this.data = data;
}
}
class WeightedTree<T> extends Tree<T>
class Tree<T, SELF extends Tree<T, SELF>> {
public T data;
public List<SELF> children;
}
class WeightedTree<T> extends Tree<T, WeightedTree<T>> {}
类树{
公共数据;
公开儿童名单;
公共树(T数据){
这个数据=数据;
}
}
但是,假设我做了这样一个类:
class Tree<T> {
public T data;
public List<Tree<T>> children;
public Tree(T data){
this.data = data;
}
}
class WeightedTree<T> extends Tree<T>
class Tree<T, SELF extends Tree<T, SELF>> {
public T data;
public List<SELF> children;
}
class WeightedTree<T> extends Tree<T, WeightedTree<T>> {}
类权重树扩展了树
它的孩子都是普通的树,不是加权树。有没有一种方法可以通过OOP原则来实现这一点 您可以这样做:
class Tree<T> {
public T data;
public List<Tree<T>> children;
public Tree(T data){
this.data = data;
}
}
class WeightedTree<T> extends Tree<T>
class Tree<T, SELF extends Tree<T, SELF>> {
public T data;
public List<SELF> children;
}
class WeightedTree<T> extends Tree<T, WeightedTree<T>> {}
或者,您可以为
Tree
和WeightedTree
创建一个具有自类型和独立子类的抽象基类。您可以执行以下操作:
class Tree<T> {
public T data;
public List<Tree<T>> children;
public Tree(T data){
this.data = data;
}
}
class WeightedTree<T> extends Tree<T>
class Tree<T, SELF extends Tree<T, SELF>> {
public T data;
public List<SELF> children;
}
class WeightedTree<T> extends Tree<T, WeightedTree<T>> {}
/* 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);
}
}
或者您可以为Tree
和WeightedTree
/*Package*/abstract class树基创建一个具有自类型和独立子类的抽象基类{
/* 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);
}
}
公共数据;
公开儿童名单;
公共树基(T数据){
这个数据=数据;
}
}
公共类树扩展树基{
公共树(T数据){
超级(数据);
}
}
公共类加权树扩展树基{
公共加权树(T数据){
超级(数据);
}
}
/*包*/抽象类树状结构{
公共数据;
公开儿童名单;
公共树基(T数据){
这个数据=数据;
}
}
公共类树扩展树基{
公共树(T数据){
超级(数据);
}
}
公共类加权树扩展树基{
公共加权树(T数据){
超级(数据);
}
}
你的通配符示例不起作用:你不能实例化这样的类型。@ruakh你可以,如果是推断的话。我的话,你是对的!真奇怪。谢谢您的更正。:-)你的通配符示例不起作用:你不能实例化这样一个类型。@ruakh但是你可以,如果它是推断出来的。我的话,你是对的!真奇怪。谢谢您的更正。:-)