下面是基类相关代码DblyLinkList
,用于DblyLinkList
类here完整代码,如何在派生的内部类中编写构造函数?
package JavaCollections.list;
public class DblyLinkList<T> implements Iterable<T>{
protected DListNode<T> sentinel;
protected int size;
class DListNode<T> {
private T item;
private DListNode<T> prev;
private DListNode<T> next;
DListNode(T item, DListNode<T> p, DListNode<T> n) {
this.item = item;
this.prev = p;
this.next = n;
}
}
DListNode<T> newNode(T item, DListNode<T> prev, DListNode<T> next) {
return new DListNode(item, prev, next);
}
public DblyLinkList() {
this.sentinel = this.newNode(null, this.sentinel, this.sentinel);
}
.........
}
下面是在同一个包中引入的类LockableList
中,设定lock
字段作为false
为每个节点创建。要删除LockableNode
节点,将使用remove()
方法检查lock
字段的值。
在调用super(item, p, n);
,错误:The constructor DblyLinkList<T>.DListNode<T>(T, DblyLinkList<T>.DListNode<T>, DblyLinkList<T>.DListNode<T>) is undefined
我怎样写在下面派生LockableList.LockableNode
类的构造函数可以被重写的方法newNode
被称为?
package JavaCollections.list;
import JavaCollections.list.DblyLinkList.DListNode;
public class LockableList<T> extends DblyLinkList<T> {
class LockableNode<T> extends DListNode<T>{
/**
* Do not lock the node during creation of a node.
*/
private boolean lock;
LockableNode(T item, DblyLinkList<T>.DListNode<T> p,
DblyLinkList<T>.DListNode<T> n) {
super(item, p, n); //this does not work
this.lock = false;
}
}
@Override
LockableNode<T> newNode(T item, DListNode<T> prev, DListNode<T> next) {
//return new LockableNode(item, prev, next); //How do i call the constructor?
}
public LockableList(){
this.sentinel = this.newNode(null, this.sentinel, this.sentinel);
}
........
}
注:这是一个继承和封装锻炼
尝试以下操作:'类LockableNode扩展DblyLinkList .DListNode {...' –
A4L
如果您更具体地描述问题而不是'这不起作用',这将有所帮助。您的编译器/ IDE报告是否提供错误消息?这是运行时行为,不能像你期望的那样工作? – dsh
@ A4L正如你所说,我做了改变它正在工作。为什么它工作? – overexchange