如何在Java中实例化一个抽象的class?

How to instantiate an abstract class in Java?

我有一个名为 EmployeeFileProcessor 的 public 抽象 class,这也是我要实例化的。我将如何轻松修复此代码以便我可以实例化它?

public abstract class EmployeeFileProcessor
{
    public static void main(String[] args) throws Exception
    {   
        EmployeeFileProcessor process = new EmployeeFileProcessor();
        //Non important code here
        process.writeFullTimeEmployee(user_input1, FtCollection[0]);
        //Defined in another class (method writeFullTimeEmployee)
        process.readFulltimeEmployee(user_input1);
        //Defined in another class (method readFullTimeEmployee)
    }
}

我怎样才能使用 'process'?

抽象 class 是一个 class,根据定义,您 无法实例化 。它类似于接口,除了能够声明字段并实际实现功能以防它们未被覆盖(对于Java 8,您可以在接口中使用默认方法).

无论如何,如果你真的想以默认方式实例化这个class,你可以尝试这样做:

EmployeeFileProcessor process = new EmployeeFileProcessor() {};

但这很可能是一个非常糟糕的设计;-)

您无法实例化 abstract class。您有三个选择:

  1. 通过从 class 声明中删除 abstract,将 EmployeeFileProcessor 更改为非抽象 class。
  2. 改为实例化您的 class 的匿名内部子 class:EmployeeFileProcessor process = new EmployeeFileProcessor() { };(不推荐)
  3. EmployeeFileProcessor中的所有方法和字段更改为static。这样,您就不再需要实例化 EmployeeFileProcessor。 (不推荐,除非你的 class 没有状态)

换句话说,如果要实例化,请不要创建 abstract class。

您不能直接创建抽象的实例 class。您必须首先定义一个扩展抽象 class 的 class,然后创建该 class.

的实例

例如

public ConcreteEmployeeFileProcessor extends EmployeeFileProcessor {

}

然后您可以创建 ConcreteEmployeeFileProcessor 的实例,但使用抽象类型引用它。

EmployeeFileProcessor instance = new ConcreteEmployeeFileProcessor();