使用抽象 class 的 class 名称在 Java 中创建新对象?

Creating a new object in Java with the class name of an abstract class?

我正在做一些考试修订工作,并创建了一个员工摘要 class 和另外两个 classes(AcademicEmployee 和 ProfessionalEmployee),它们从 Employee class 延伸出来。

我在 Employee class 到 运行 这些行中设置了一个 public static void main :

ProfessionalEmployee boss = new ProfessionalEmployee("The Big Man", 5000.0, null, 10);
AcademicEmployee e1 = new AcademicEmployee("Ryan", 1000.0, boss, 'A');

我知道你不能实例化一个抽象 class 并且创建的实际对象是 "new" 关键字之后的任何东西但是为什么我可以这样做:

Employee boss = new ProfessionalEmployee("The Big Man", 5000.0, null, 10);

我认为它的工作方式是 "Data type" 然后 "Reference name" = new ...

但我只是对为什么允许我将数据类型设置为 Employee 感到困惑。抱歉,如果这是一个奇怪的问题,我只是 Java 的新手:)

这是java中Polymorphism的一个概念。由于您的 class ProfessionalEmployeeAcademicEmployee 都扩展了 Employee,因此两者都可以分配给 Employee 引用对象。

多态性允许您定义一个接口或 class 并具有多个实现。

您的问题是,

Creating a new object in Java with the class name of an abstract class?

但是你在哪里创建了这样一个新对象?您已经创建了两个 Object,如下所示,

 new AcademicEmployee("Ryan", 1000.0, boss, 'A');

new ProfessionalEmployee("The Big Man", 5000.0, null, 10);

而且,AcademicEmployeeProfessionalEmployee 都不能是 abstract,否则你会得到一个编译时错误。

因为 AcademicEmployeeProfessionalEmployee 是一个 Employee (因为你有 extended/implemented 它),你可以分配!

这是简单的解释 here