为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我需要对对象数组中的特定引用进行强制转换?

为什么我需要对对象数组中的特定引用进行强制转换?

海绵宝宝撒 2022-09-21 17:37:29
要引用数组中的特定对象,我需要将int转换为其类型,否则编译器不接受,为什么我需要此转换?示例:Person[] people = Person[5];            //Generic Array of specific objectsEmployee employee1 = new Employee();    //Employee class extends PersonManager manager1 = new Manager();       //Manager class extends Personpeople[0] = employee1;people[1] = manager1;Person ref = people[0];                //OK! it can compileEmployee ref2 = people[1];               //Do not compileEmployee ref2 = (Employee) people[1];      //OK! it can compile为什么需要演员阵容?
查看完整描述

5 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

在 Java 中有一个 和 的概念。上嵌意味着转换为超类型,而下嵌意味着转换为子类型。upcastingdowncasting

每当有关系时,你都可以毫无伤害地进行升级。但需要注意的是低调。Is-A

例如,您有 和 因为 两者 都是 类,因此 People 数组可以存储这两个。现在,当你做编译器不知道它实际上是员工,因为有相等的概率,可以经理作为经理类也扩展了人。因此,您需要显式提供一个强制转换,告诉编译器您知道自己在做什么,并且无需给出任何编译错误。但是,如果在运行时出现任何问题,则将抛出a。People arrayEmployeeManagerextendsPeopleEmployee ref2 = people[1];ClassCastException


查看完整回答
反对 回复 2022-09-21
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

它不是在没有强制转换的情况下编译的,因为编译器不知道它是 .people[1]Employee

来自 Java 教程。铸造对象

我们可以告诉编译器,我们承诺通过显式转换来分配给它。Employeepeople[1]

此强制转换将插入一个分配了 的运行时检查,以便编译器可以安全地假定 该检查是 。如果不是 在运行时,将引发异常。people[1]Employeepeople[1]Employeepeople[1]Employee

查看更多 Java 中的强制转换变量


查看完整回答
反对 回复 2022-09-21
?
倚天杖

TA贡献1828条经验 获得超3个赞

变量的类型为 。 ( - 实例也可以是扩展的子项 )。peoplePersonPerson[] people = Person[5];type[] people = new instancetype

这里编译器看到,你需要说在编译器它也可以(导致扩展)通过转换。Employee ref2 = people[1];peoplePersonEmployeeEmployeePerson

你可以阅读更多,关于这个主题,在这里: https://www.baeldung.com/java-type-casting


查看完整回答
反对 回复 2022-09-21
?
哔哔one

TA贡献1854条经验 获得超8个赞

变量的类型为 。 ( - 实例也可以是扩展的子项 )。peoplePersonPerson[] people = Person[5];type[] people = new instancetype

这里编译器看到,你需要说在编译器它也可以(导致扩展)通过转换。Employee ref2 = people[1];peoplePersonEmployeeEmployeePerson

你可以阅读更多,关于这个主题,在这里: https://www.baeldung.com/java-type-casting


查看完整回答
反对 回复 2022-09-21
?
白衣非少年

TA贡献1155条经验 获得超0个赞

因为您有一个员工引用,并且您尝试使用类型为 Person 的值对其进行实例化。

员工一个人,但一个人不一定是员工。如果我错了,请纠正我。


查看完整回答
反对 回复 2022-09-21
  • 5 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信