我知道您可以将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”值将需要接受子类型的类或工厂),但可以满足您的要求。