Как наследовать внутренний класс родителя в этом коде?

ниже приведен родительский класс 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;
        }


    }
.....
}

ниже приведен производный класс 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);
        }


    .....
 }

если class LockableNode<T> extends DListNode<T> в приведенном выше коде :The constructor DblyLinkList<T>.DListNode<T>(T, DblyLinkList<T>.DListNode<T>, DblyLinkList<T>.DListNode<T>) is undefined возникает в строке super(item, p, n)

эта ошибка будет устранена, сказав: class LockableNode<T> extends DblyLinkList<T>.DListNode<T>

как я понимаю эту ошибку? Почему все разрешилось?

1 ответов


вы объявляете переменную типа T во внутреннем классе. Это означает, что внутри внутреннего класса T внешнего класса скрыт и больше не может быть упомянут.

поскольку у вас есть нестатический внутренний класс, вы можете просто удалить переменную типа T есть:

class DListNode { ... }

потому что он наследует его от содержащего класса (и вероятно, вы имеете в виду, что переменные так же,).