我正在做一些考试复习工作,并创建了一个Employee抽象类和另外两个类(AcademyAloyee和ProfessionalEmployees(,这两个类从Employee类扩展而来。
我在Employee类中设置了一个公共静态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);
我认为它的工作方式是"数据类型",然后"引用名称"=新。。。
但我只是对为什么允许我将数据类型设置为Employee感到困惑。很抱歉,如果这是一个奇怪的问题,我只是Java的新手:(
这是java中多态性的一个概念。由于类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
(因为您已经扩展/实现了它(,因此允许您分配!
这里用简单的词语解释