当前位置: 首页 > 知识库问答 >
问题:

用抽象类的类名在Java中创建一个新对象?

姬俊远
2023-03-14

我正在进行一些考试修改工作,创建了一个Employee抽象类和两个扩展到Employee类的其他类(AcademyicEmployee和ProfessionalEmployee)。

我在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:)

共有1个答案

贲功
2023-03-14

这是Java中多态性的概念。由于您的类ProfessionalEmployeeAcademiicEmployee都扩展了Employee,因此都可以分配给Employee引用对象。

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

 类似资料:
  • 我通过学校为一项任务提供的简报创建了一个飞机座位预订系统。我遇到了一个我无法解决的主要问题。 摘要说明抽象类必须有一个抽象方法和大约4个公共方法。在抽象类的两个子类中,我们都必须初始化对象数组(所有普通的座位)。然而,一旦它们被初始化,我不知道如何将它们发送回抽象类(该类有一个检查未预订的飞机座位的方法,这就是我需要初始化的座位对象的地方) ArrayIndexOutOfBounds在一个应该在边

  • Class类提供很多方法用于获取类的各种信息,比如获取类名、判断该类是否是一个接口还是普通类等等。在Java中枚举类是一种类,而注解是一个接口,数组也是一个类;Java原始类型(boolean, byte, char, short, int, long, float, and double)和关键字void也被表示为Class的对象。

  • 问题内容: 假设这是一个抽象类,具有多个可以重写的方法。 在Java中,我可以执行以下操作: 如何在Kotlin中做同样的事情? 问题答案: 从Kotlin官方语言文档中: 适用于您手头的问题: 正如Peter Lamberg指出的那样-如果匿名类实际上是功能接口的实现( 即不是抽象类的实现 ),则可以使用SAM Conversions 进一步简化该语句: 还请注意有关Java和Kotlin中定义

  • 问题内容: 我正在尝试开发在线酒店预订系统。我有一个主类,它从用户那里获取输入信息,例如他们的姓名,他们的付款信息和其他数据字段,并使用该信息作为对象。我有另一个名为的类,其中包含每个对象的列表。我遇到的问题是我无法找出一种将对象添加到对象列表中的方法。这是一些代码: 我不知道如何获取新对象作为类中方法的参数传递。我只是束手无策,希望有人能帮助我慢跑。 谢谢你的帮助。 问题答案: 让makeRes

  • 问题内容: 考虑以下嵌套类。 问题答案: 您可以像这样声明一个对象数组。 并实例化它们,您可以在类中执行类似的操作。

  • 我有一个名为Card的类,我有一个for循环: 我想做的是基于for循环创建新实例。例如,我希望名字是card1、card2、card3等等。数字来自for循环。 我试过这个,但似乎不起作用: 谁能告诉我我做错了什么吗? 谢谢 所以我正在使用气垫船充满鳗鱼的解决方案,但我还有另一个问题。 我用的是卡片列表。添加(新卡()),当我尝试使用Card(I)设置名称时,java不允许我这么做。在没有i的情