人们为什么要铸造物体

时间:2018-09-17 20:15:40

标签: java object casting

在研究oracle文档时,我遇到了Casting对象,但我不理解人们为什么使用它的目的。

所以主要说您有

Person p2 = new Student();
Person p3 = new GraduateStudent();

然后您有单独的类

class Person
{

}

class Student extends Person
{

}

class GraduateStudent extends Student
{

}

我知道学生是一个人,而研究生是一个人 但是为什么一个人会写

Person s1 = new Student()

代替

Student s1 = new Student()

2 个答案:

答案 0 :(得分:3)

我认为您要问的是关于Java中的多态分配。我听到的一个很好的例子是这样的:

例如,您需要为组织中每种类型的员工生成工资单。如果没有多态性,那么您将需要为组织中的每种类型的Employee提供职能。例如: 对于每个经理,您都需要

public void generatePayroll(Manager manager)

对于帐户员工,您需要

public void generatePayroll(Accountant accountant)

因此,您几乎马上就会意识到,通过将生成工资单的功能应用于每个员工,您将做一些繁琐的工作。相反,(并感谢上帝的多态性),您可以有一个方法,该方法只接受一个Employee类型,因为Accountant和Manager都扩展了Employee类。然后签名将更改为这样:

public void generatePayroll(Employee employee)

这样,您将可以不必为每个Employee级别都拥有generatePayroll方法,只需坚持这一方法! (请记住,DRY最好!)

答案 1 :(得分:0)

Person s1 = new Student()

表示s1是一个Person,但也许您不需要编译器知道它也是Student

在声明s1后,如果不是final,则可以这样重新定义s1:

s1 = new GraduateStudent()

想象一下,在学校里您只在为学生预定的房间里吃午餐,当人们通过通行证进入房间时,机器只需要知道通行证是否有效(即属于学生),而从不需要搜索他是否毕业。