扩展通用抽象类和正确使用超级

public abstract class AbstractTool { protected ArrayList ledger; public AbstractTool() { ledger = new ArrayList(); } public AT getToolAt(int i) { return ledger.get(i); } // More code Which operates on Ledger ... } public class Tool extends AbstractTool { public Tool() { super(); } } 

如何正确调用super将ToolATgenerics传递给AbstractTool构造函数?

当我宣布Tool (Say, Tool )时,似乎无论我选择AT是什么,我总是得到一个AbstractThing而不是Thing 。 这似乎打败了仿制药的目的……

帮帮我?

 public class Tool extends AbstractTool { 

换句话说,如果使用generics扩展或实现某些内容,请记住为它们定义generics参数。

不应该是Tool extends AbstractTool

我想你可能想要的是:

  public abstract class AbstractTool { protected List ledger = new ArrayList(); public AT getToolAt(int i) { return ledger.get(i); } // More code Which operates on Ledger ... } public class Tool extends AbstractTool { // Tool stuff ... } 

由于Tool是一个具体的类,因此不需要对其进行参数化。 如果在声明时初始化List (哦,并记得编程到接口),则不需要构造函数,并且因为它受到保护,所以子类可以直接访问它。