Я думаю, что вы, вероятно, хотите:
public abstract class AbstractTool<AT extends AbstractThing> {
protected List<AT> ledger = new ArrayList<AT>();
public AT getToolAt(int i) {
return ledger.get(i);
}
// More code Which operates on Ledger ...
}
public class Tool extends AbstractTool<Thing> {
// Tool stuff ...
}
Поскольку Tool
является конкретным классом, его не нужно параметризировать. Конструкторам нет необходимости, если вы инициализируете List
(о, не забывайте программировать для интерфейса) при объявлении, и поскольку он защищен, подклассы могут обращаться к нему напрямую.