修饰符
继承关系中,在不同包子类中可以访问protect属性
多态分类
1.编译时多态
调用引用类型的方法,通过重载实现
2.运行时多态
调用子类重写后的方法,通过重写实现
向上转型和向下转型
1.向上转型
小类型转大类型
2.向下转型
大类型转小类型(转型判断 instanceof)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PJviZ3F2-1646661433551)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220307180341675.png)]
父引子实这样做有什么意义呢
因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的; 同时,父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;(即只能访问父类中声明的方法) 对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。也可以叫做动态绑定。
动态绑定是指”在执行期间(而非编译期间)“判断所引用对象的实际类型,根据实际的类型调用其相应的方法。
父类引用为什么可以指向子类的实例
因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.所以z可以调用父类的方法.
instanceof语法
boolen flag = 对象引用 instanceof 数据类型;//判断对象是否为此类型
ag = 对象引用 instanceof 数据类型;//判断对象是否为此类型