如何在此代码中inheritance父类的内部类?

下面是父类DblyLinkList

 package JavaCollections.list; import java.util.Iterator; import java.util.NoSuchElementException; public class DblyLinkList implements Iterable{ class DListNode { private T item; private DListNode prev; private DListNode next; DListNode(T item, DListNode p, DListNode n) { this.item = item; this.prev = p; this.next = n; } } ..... } 

下面是派生类LockableList

  package JavaCollections.list; import JavaCollections.list.DblyLinkList.DListNode; public class LockableList extends DblyLinkList { class LockableNode extends DblyLinkList.DListNode { /** * lock the node during creation of a node. */ private boolean lock; LockableNode(T item, DblyLinkList.DListNode p, DblyLinkList.DListNode n) { super(item, p, n); // this does not work this.lock = false; } } LockableNode newNode(T item, DListNode prev, DListNode next) { return new LockableNode(item, prev, next); } public LockableList() { this.sentinel = this.newNode(null, this.sentinel, this.sentinel); } ..... } 

如果class LockableNode extends DListNode在上面的代码中class LockableNode extends DListNode ,则错误The constructor DblyLinkList.DListNode(T, DblyLinkList.DListNode, DblyLinkList.DListNode) is undefined发生在super(item, p, n)super(item, p, n)

通过说: class LockableNode extends DblyLinkList.DListNode来解决此错误

我如何理解这个错误? 为什么它得到解决?

您正在重新声明内部类中的类型变量T 这意味着在内部类中,外部类的T被隐藏,不能再被引用。

由于你有一个非静态的内部类,你可以在那里删除类型变量T

 class DListNode { ... } 

因为它从包含类inheritance它(可能你的意思是变量是相同的,无论如何)。