如何在此代码中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它(可能你的意思是变量是相同的,无论如何)。