我知道您可以将LinkedList的实现分为两类。在一个实例中,实际的LinkedList是对某些链接节点中第一个的引用,就像这样

public class LinkedList1<E>{

    class Node{
        E data;
        Node next;
    }

    Node head;

}


该版本可能更好,但是或者,有一个更“直接”的版本,这使得删除头部(头部从客户端的角度来看是第一个元素)之类的操作变得有些棘手,但在LinkedList2实例中仍然可以实现:

public class LinkedList2<E>{

    E data;
    LinkedList2 next;

}


我很好奇是否有办法创建LinkedList2Child extends LinkedList2,使next字段为LinkedList2Child类型,也许涉及反射?

编辑:由于版本1可用,因此这并不会阻止我完成任何工作-我只是对总体上的问题感到好奇,这是一个示例。

我知道您可以通过声明与父级字段同名的字段来“隐藏”子类中的字段,但是如果您要使用在该字段上操作的父级方法,则此方法将无效。

最佳答案

泛型:

public class LinkedList2<E, T extends LinkedList2>{

    E data;
    T next;

}

public class LinkedSubclass extends LinkedList2<LinkedSubclass> {

}


它对使用泛型的操作有通常的限制(例如,在基类中构造新的“ next”值将需要接受子类型的类或工厂),但可以满足您的要求。

08-04 00:48