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

时间:2015-06-20 18:05:57

标签: java instantiation abstract

我有一个名为EmployeeFileProcessor的公共抽象类,这也是我想要实例化的内容。我如何轻松修复此代码以便我可以实例化它?

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)
    }
}

我如何能够使用'流程'?

3 个答案:

答案 0 :(得分:2)

抽象类是一个无法实例化的类。它类似于接口,除了能够声明字段并实际实现函数以防它们不被覆盖(对于Java 8,您可以使用接口中的默认方法)

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

CREATE OR REPLACE FUNCTION on_ai_myTable() RETURNS TRIGGER AS $$

BEGIN
SELECT fn_name, count(*) + 1 FROM table_ebscb_spa_log02 WHERE time_type = 'Start' GROUP BY fn_name
RETURN NEW.fn_name;
END
$$
LANGUAGE plpgsql;

但它很可能是非常差设计; - )

答案 1 :(得分:2)

您无法实例化abstract类。您有三种选择:

  1. 通过从类声明中删除EmployeeFileProcessor,将abstract更改为非抽象类。
  2. 实例化您的类的匿名内部子类:EmployeeFileProcessor process = new EmployeeFileProcessor() { };(不推荐)
  3. EmployeeFileProcessor中的所有方法和字段更改为static。这样,您不再需要实例化EmployeeFileProcessor。 (除非你的班级没有州,否则不推荐)
  4. 换句话说,如果要实例化它,请不要创建abstract类。

答案 2 :(得分:2)

您无法直接创建抽象类的实例。您必须首先定义一个扩展抽象类的类,然后创建该类的实例。

e.g。

public ConcreteEmployeeFileProcessor extends EmployeeFileProcessor {

}

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

EmployeeFileProcessor instance = new ConcreteEmployeeFileProcessor();