如何在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。您有三个选择:
- 通过从 class 声明中删除
abstract
,将 EmployeeFileProcessor
更改为非抽象 class。
- 改为实例化您的 class 的匿名内部子 class:
EmployeeFileProcessor process = new EmployeeFileProcessor() { };
(不推荐)
- 将
EmployeeFileProcessor
中的所有方法和字段更改为static
。这样,您就不再需要实例化 EmployeeFileProcessor
。 (不推荐,除非你的 class 没有状态)
换句话说,如果要实例化,请不要创建 abstract
class。
您不能直接创建抽象的实例 class。您必须首先定义一个扩展抽象 class 的 class,然后创建该 class.
的实例
例如
public ConcreteEmployeeFileProcessor extends EmployeeFileProcessor {
}
然后您可以创建 ConcreteEmployeeFileProcessor 的实例,但使用抽象类型引用它。
EmployeeFileProcessor instance = new ConcreteEmployeeFileProcessor();
我有一个名为 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。您有三个选择:
- 通过从 class 声明中删除
abstract
,将EmployeeFileProcessor
更改为非抽象 class。 - 改为实例化您的 class 的匿名内部子 class:
EmployeeFileProcessor process = new EmployeeFileProcessor() { };
(不推荐) - 将
EmployeeFileProcessor
中的所有方法和字段更改为static
。这样,您就不再需要实例化EmployeeFileProcessor
。 (不推荐,除非你的 class 没有状态)
换句话说,如果要实例化,请不要创建 abstract
class。
您不能直接创建抽象的实例 class。您必须首先定义一个扩展抽象 class 的 class,然后创建该 class.
的实例例如
public ConcreteEmployeeFileProcessor extends EmployeeFileProcessor {
}
然后您可以创建 ConcreteEmployeeFileProcessor 的实例,但使用抽象类型引用它。
EmployeeFileProcessor instance = new ConcreteEmployeeFileProcessor();