[英]How to write constructor in derived inner class?
以下是基类相关代码DblyLinkList
, 此处是DblyLinkList
类的完整代码,
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
引入的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);
}
........
}
注意:这是继承和封装的练习
您没有给const访问者授予acces等级 ,那么默认情况下:
Modifier Class Package Subclass World
no modifier Y Y N N
这称为package-private ,并且内部子类即使在同一包中也无法访问此构造函数。 发生这种情况是因为它是一个内部类,所以即使子类可以访问super()
,内部类也不能。
因此:
public class LockableList<T> extends DblyLinkList<T> {
LockableList() {
super(); //this work
}
class LockableNode<T> extends DListNode<T>{
LockableNode(T item, DblyLinkList<T>.DListNode<T> p, DblyLinkList<T>.DListNode<T> n) {
super(item, p, n); //this does not work
}
}
如果声明DblyLinkList
的构造DblyLinkList
public或protected,则可以从内部类访问它。
protected DListNode<T> newNode(T item, DListNode<T> prev, DListNode<T> next) {
return new DListNode(item, prev, next);
}
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
还请检查此问题以澄清有关Java
访问级别的信息
尝试这个:
LockableNode(T item, DListNode<T> p,
DListNode<T> n) {
super(item, p, n);
this.lock = false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.