下面是基類相關代碼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