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