Dưới đây là các tầng lớp phụ huynh DblyLinkList
Làm cách nào để kế thừa lớp bên trong của cha mẹ trong mã này?
package JavaCollections.list;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class DblyLinkList<T> implements Iterable<T>{
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;
}
}
.....
}
Dưới đây là lớp có nguồn gốc LockableList
,
package JavaCollections.list;
import JavaCollections.list.DblyLinkList.DListNode;
public class LockableList<T> extends DblyLinkList<T> {
class LockableNode<T> extends DblyLinkList<T>.DListNode<T> {
/**
* 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;
}
}
LockableNode<T> newNode(T item, DListNode<T> prev, DListNode<T> next) {
return new LockableNode(item, prev, next);
}
public LockableList() {
this.sentinel = this.newNode(null, this.sentinel, this.sentinel);
}
.....
}
Nếu class LockableNode<T> extends DListNode<T>
trong đoạn mã trên, lỗi: The constructor DblyLinkList<T>.DListNode<T>(T, DblyLinkList<T>.DListNode<T>, DblyLinkList<T>.DListNode<T>) is undefined
xảy ra tại dòng super(item, p, n)
này lỗi được giải quyết bằng cách nói: class LockableNode<T> extends DblyLinkList<T>.DListNode<T>
Làm cách nào để hiểu lỗi này? Tại sao nó được giải quyết?
Hãy thử làm cho 'DListNode' được bảo vệ:' lớp bảo vệ DListNode {...} ' –
'Công việc này (mục, p, n);' thay vì 'siêu'? – Craig
@NicholasRobinson Đó không phải là vấn đề bởi vì nếu đó là trường hợp, thông báo lỗi sẽ khác nhau. Cũng lưu ý rằng họ đang ở trong cùng một gói, do đó, nó chắc chắn không phải là một vấn đề tầm nhìn. – m0skit0