如何在这段代码中继承父类的内部类? [英] How to inherit parent's inner class in this code?

查看:167
本文介绍了如何在这段代码中继承父类的内部类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是父类 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆