面向对象三大特征:封装性,继承性,多态性
extends继承或者implements实现,是多态的前提。
马云是一个人,同时一个老板。既有人的形态,又有老板的形态,拥有多种形态,这就是对象的多态性。
代码当中体现多态性,就是一句话:父类引用指向子类对象
格式:父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
访问成员变量的两种方式:
1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。
多态中,访问成员方法的规则:看new 的对象是谁,优先用谁,没有则向上找。
口诀:编译看左边,运行看右边。成员变量不符合这个口诀。
对比一下:
成员变量:编译看左边,运行还看左边。
成员方法:编译看左边,运行看右边。
1.对象的向上转型,其实就是多态的写法:父类名称指向子类对象。
格式:父类名称 对象名 = new 子类名称();
含义:右侧创建一个子类对象,把它当作父类来看待使用。
注意事项:向上转型是安全,从小范围转向大范围。
2.对象的向下转型,其实是一个还原的动作。
格式:子类名称 对象名 = (子类名称)父类对象;
含义:将父类对象还原成本来的子类对象。
注意事项:
a.必须保证对象本来创建的时候,就是猫,向下转型的时候才能是猫。
b.如果对象创建的时候是狗,向下转型成为猫,就会报错。ClassCastException异常。
类似于:基本类型的强转。
对象 instanceof 类名称 ,这会得到一个Boolean值结果,也就是判断前面的对象能不能当做后面类型的实例。