我正在做一些考试修订工作,并创建了一个Employee抽象类和另外两个从Employee类扩展的类(AcademicEmployee和ProfessionalEmployee)。
我在Employee类中设置了一个公共的static void main来运行这些行:
ProfessionalEmployee boss = new ProfessionalEmployee("The Big Man", 5000.0, null, 10);
AcademicEmployee e1 = new AcademicEmployee("Ryan", 1000.0, boss, 'A');
我知道您不能实例化一个抽象类,并且创建的实际对象是在“ new”关键字之后的任何东西,但是为什么允许我这样做:
Employee boss = new ProfessionalEmployee("The Big Man", 5000.0, null, 10);
我认为它以“数据类型”然后“引用名称” = new ...的方式工作。
但是我只是对为什么允许将数据类型设置为Employee感到困惑。抱歉,如果这是一个奇怪的问题,我才刚接触Java:)
这是Java中Polymorphism的概念。由于类ProfessionalEmployee
和AcademicEmployee
都扩展了Employee
,因此两者都可以分配给Employee
参考对象。
多态允许您定义一个接口或类并具有多个实现。
您的问题读为,
用抽象类的类名在Java中创建新对象?
但是您在哪里创建了这样的新对象?您已经创建了两个Object
,如下所示,
new AcademicEmployee("Ryan", 1000.0, boss, 'A');
new ProfessionalEmployee("The Big Man", 5000.0, null, 10);
而且,AcademicEmployee
和ProfessionalEmployee
都不能为abstract
,否则会出现编译时错误。
由于AcademicEmployee
和ProfessionalEmployee
是 Employee
(由于您已对其进行扩展/实施,因此您可以进行分配!
这用简单的词here来解释