java - 从父类(super class) : Node to SpecialNode in a linked list 向下转型

标签 java linked-list superclass downcast

public class Node {
  public Node right;
}

public class SpecialNode extends Node {
  public String specialLabel;
}

public class Testmain {
  public static void main(String[] args) {
  Node n1 = new Node();
  Node n2 = new Node();
  Node n3 = new Node();
  n1.right=n2;
  n2.right=n3;

  // some calculations --> now n2 has to become a SpecialNode, how ???
  }
} 

我正在使用 Node 实现一个单链表,其中每个节点都知道其正确的邻居。我创建了一个列表:节点 n1-> 节点 n2-> 节点 n3。创建列表后,它只包含 Node 类型的元素。现在我想告诉节点 n2 是一个 SpecialNode 以提供一个 specialLabel。向下转型之后,列表应该看起来像 Node n1-> SpecialNode n2-> Node n3。 如何做到这一点?

(请注意,n2 不知道它的左邻居。请注意,我必须在列表创建后告诉 n2 是特殊的,因此在将其初始化为父类(super class)的节点之后,因为我需要在决定哪个节点之前进行一些计算会很特别。)

最佳答案

你不能告诉 n2 是一个 SpecialNode,因为它从来没有

我认为您最好尝试用 SpecialNode 的新实例替换现有的 n2。让 n2 替换自己(如果它知道它在列表中的位置)或失败,至少给你一个 SpecialNode< 的新实例是一个好方法。在这种情况下,您必须手动将其连接到 n1

SpecialNode sn = n2.toSpecialNode();

关于java - 从父类(super class) : Node to SpecialNode in a linked list 向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12383912/

相关文章:

java在父类(super class)作为参数的子类中创建构造函数

java - 从 Java 连接到 PickBasic

java - 如何在Java中自定义ThreadFactory的所有子线程的名称?

c++ - 清理链接对象的动态内存

c - 一些指针运算

javascript - 解开循环链表意味着什么?

java - ZK 日期框与 java.time

java - 从共享首选项恢复日期并显示 Android 中内联日期选择器的更改

java - 货币币继承