向上造型与多态
我们把这个称为造型:造型的意思就是把一类型的对象付给另外类型的变量,这个过程叫做造型
造型cast
子类对象可以赋值给父类 变量
注意 Java中不存在 对象 对对象的赋值
父类的对象不能赋值给子类型的变
可以用造型 c=(Car)v;
(只有当v这个变量实际管理的是Car)
就是静态类型专为某个类型的变量,去管理了动态类型和它的静态类型不符的那个对象
造型
用括号围起来类型放在值的前面
对象本身并没有发现任何变化
所以不是类型转换
运行时有机制类检查这样的转化是否合理
ClasscastException
那么所谓的向上造型就是拿一个子类的对象当做父类的对象类用
向上造型是默认的,不需要运算符
向上造型总是安全的
多态
在前面继承这个部分,我们看了这个datebase之后,有细心的同学发现当中有问题
也就是说在我们的这个for循环里面,循环的每一轮,它会拿到一item,根据我们放进去的可能是cd可能dvd可是个
一个是他的声明类型,一个是他的动态类型,他的生命类型永远是item,而他的动态类型可能是cd、可能dvd可能没给,它会让它实际管理的那个对象的类型去做print,作实际管的是cd
函数调用的时候,调用那个函数这件事叫做绑定
静态绑定:根据变量的声明类型类决定
动态绑定 根据变量的动态类型来决定
在 成员函数中调用其他成员函数也是通过this 这个对象变量来调用的
覆盖override
子类和父类存在名称和参数表完全相同函数,这一对函数构成覆盖关系
通过父类的变量调用存在覆盖关系的函数时会调用变量当时所属的类的桉树
你是一个Shape 你就应该会draw 那么你就去draw吧