如何在这段代码中继承父类的内部类? [英] How to inherit parent's inner class in this code?
问题描述
以下是父类 DblyLinkList
package JavaCollections.list ;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class DblyLinkList< T>实现Iterable< T> {
class DListNode< T> {
私人T项;
私人DListNode< T>上一张;
私人DListNode< T>下一个;
DListNode(T item,DListNode< T> p,DListNode< T> n){
this.item = item;
this.prev = p;
this.next = n;
}
}
.....
}
下面是派生类 LockableList
,
package JavaCollections.list;
import JavaCollections.list.DblyLinkList.DListNode;
公共类LockableList< T>扩展DblyLinkList< T> {
class LockableNode< T>扩展DblyLinkList< T> .DListNode< T> {
/ **
*在创建节点时锁定节点。
* /
私人布尔锁定;
LockableNode(T item,DblyLinkList< T> .DListNode< T> p,
DblyLinkList< T> .DListNode< T> n) N); //这不起作用
this.lock = false;
}
}
LockableNode< T> newNode(T item,DListNode< T> prev,DListNode< T> next){
返回新的LockableNode(item,prev,next);
}
public LockableList(){
this.sentinel = this.newNode(null,this.sentinel,this.sentinel);
}
.....
}
如果 class LockableNode< T>在以上代码中扩展DListNode
, error :构造函数DblyLinkList< T> .DListNode< T>(T,DblyLinkList< T> (item,p,n)
处出现未定义的 .DListNode< T> ;, DblyLinkList< T> .DListNode< / p>
解决这个错误的方法是: class LockableNode< T>扩展DblyLinkList< T> .DListNode< T>
我如何理解这个错误?为什么它得到解决?
您将重新声明类型变量 T
在内部阶层。这意味着在内部类中,外部类的 T
是隐藏的,不能再被引用。
由于你有一个非静态的内部类,你可以在这里删除类型变量 T
:
class DListNode {...}
因为它从包含类(也许你的意思是变量是相同的,无论如何)。
Below is the parent class DblyLinkList
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;
}
}
.....
}
Below is the derived class 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);
}
.....
}
If class LockableNode<T> extends DListNode<T>
in the above code, error:The constructor DblyLinkList<T>.DListNode<T>(T, DblyLinkList<T>.DListNode<T>, DblyLinkList<T>.DListNode<T>) is undefined
occurs at line super(item, p, n)
This error is resolved by saying: class LockableNode<T> extends DblyLinkList<T>.DListNode<T>
How do I understand this error? Why it got resolved?
You are redeclaring the type variable T
in the inner class. That means that within the inner class, the T
of the outer class is hidden and cannot be referred to anymore.
Since you have a non-static inner class, you can just remove the type variable T
there:
class DListNode { ... }
because it inherits it from the containing class (and probably you mean that the variables are the same, anyway).
这篇关于如何在这段代码中继承父类的内部类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!