使用抽象 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 ProfessionalEmployee
和 AcademicEmployee
都扩展了 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);
而且,AcademicEmployee
和 ProfessionalEmployee
都不能是 abstract
,否则你会得到一个编译时错误。
因为 AcademicEmployee
和 ProfessionalEmployee
是一个 Employee
(因为你有 extended/implemented 它),你可以分配!
这是简单的解释 here
我正在做一些考试修订工作,并创建了一个员工摘要 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 ProfessionalEmployee
和 AcademicEmployee
都扩展了 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);
而且,AcademicEmployee
和 ProfessionalEmployee
都不能是 abstract
,否则你会得到一个编译时错误。
因为 AcademicEmployee
和 ProfessionalEmployee
是一个 Employee
(因为你有 extended/implemented 它),你可以分配!
这是简单的解释 here