Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:泛型节点和树的继承_Java_Inheritance - Fatal编程技术网

Java:泛型节点和树的继承

Java:泛型节点和树的继承,java,inheritance,Java,Inheritance,出现以下问题: 我正在使用我自己的树类,它是通用的。另一个类是从该树类继承的联系人列表。我这样做的原因是其他类都需要相同的树功能,但它们的用途不同 该节点也是一个通用节点,还继承到特殊节点类型,如电话列表、电子邮件联系人列表等 在树类中,有一些方法使用局部变量节点。在联系人列表树中,我需要这个变量作为从节点继承的联系人。当我在联系人列表中使用其中一个方法时,它将根节点定义为node而不是contact,因此它使用通用节点而不是继承的节点 这就是它的样子: public class Tree {

出现以下问题: 我正在使用我自己的树类,它是通用的。另一个类是从该树类继承的联系人列表。我这样做的原因是其他类都需要相同的树功能,但它们的用途不同

该节点也是一个通用节点,还继承到特殊节点类型,如电话列表、电子邮件联系人列表等

在树类中,有一些方法使用局部变量节点。在联系人列表树中,我需要这个变量作为从节点继承的联系人。当我在联系人列表中使用其中一个方法时,它将根节点定义为node而不是contact,因此它使用通用节点而不是继承的节点

这就是它的样子:

public class Tree {

  Node root;

  public void insert( String x ) {
        root = insert( x, root );
 }
这是联系人列表根,属于扩展节点的联系人类型:

public class ContactList extends Tree {

Contact root;
这是一个节点:

如何判断继承的方法insert不使用本地根,而是使用继承类中的根

我试图在ContactList的构造函数中解决这个问题:


没用。我认为它会立即被树类覆盖,那么继承通用节点行为的正确方法是什么呢?

您不需要ContactList中的根变量。如果联系人是节点,您可以在构造函数或其他超类树方法中轻松分配它:

对于联系人列表:

假设联系人扩展了节点。现在,当您在ContactList实例上调用继承的方法时,将使用Contact实例

ContactList list = new ContactList(new Contact(...));
list.insert("X");
但如果要删除联系人和节点之间的继承关系,则应使用:

然后:

Tree contactTree = new Tree<Contact>();
...
contactTree.insert(Contact c);

使用泛型。修改树和节点以具有以下泛型类型:

树 节点 然后在其字段和方法中仅使用泛型类型T和N。这允许您拥有f.e.子类

ContactTree扩展了树 ContactNode扩展节点
请记住,如果您的ContactTree最终没有任何方法或字段,那么普通树就足够了。

您应该在节点上使用泛型。我尝试了您的解决方案,但它将节点标记为以下错误:类型节点的参数数不正确;无法使用参数对其进行参数化是的,忘记添加另一个类型参数,已修复。现在节点似乎可以工作,但在树中它表示:绑定不匹配:类型T不是类型NodeIt的绑定参数的有效替代品它应该是节点
public class Tree {

  Node root;

  public Tree(Node root) {
    this.root = root; 
  }

  public void insert( String x ) {
        root = insert( x, root );
  }
}
public class ContactList extends Tree {

  public ContactList(Contact contact) {
    super(contact);
  }
...
}
ContactList list = new ContactList(new Contact(...));
list.insert("X");
public class Tree<T> {
  T root;

  public void insert(T node) {
    ...
  }
}
Tree contactTree = new Tree<Contact>();
...
contactTree.insert(Contact c);