对象的多态
多态是指对象的多态,而不是类的多态。是指多种状态,而不是指多种形态
格式:
父类名称 对象名 = new 子类名称();或者 接口名称 对象名 = new 实现类名称();
访问成员变量的两种方式:
- 直接通过对象名称访问成员变量;看等号左边是谁,优先用谁,没有则向上找。
- 间接通过成员方法访问成员变量,看该方法属于谁,优先用谁,没有则向上找。
访问成员方法的规则:
- 看new的是谁,就优先用谁,没有则向上找
- 口诀:编译看左边,运行看右边
多态的好处
假如有以下关系:
如果不用多态,只用子类,那么写法是:
Teacher one = new Teacher():
one.work(); //讲课
Assistant two = new Assistant();
two.work(); //辅导
现在唯一要做的事情,就是调用work方法,其他的功能不关心。
如果使用多态的写法。对比一下:
Employee one = new Teacher();
one.work(); //讲课
Employee two = new Assistant();
two.work();//辅导
好处:无论右边new的时候换成哪个子类对象,等号左边调用方法都不会变化。
多态的向上转型
对象的向上转型,其实就是多态写法:
-
格式:
父类名称 对象名 = new子类名称():
Animal animal = new Cat(): -
含义:
右侧创建一个子类对象,把它当做父类来看待使用。
创建了一只猫,当做动物看待,没问题
-
注意事项:
向上转一定是安全的。 从小范围转向了大范围,从小范围的猫,向上转换成为更大范围的动物。
类似于:
double num = 100; //正确,int --> double,自动类型转换。
多态的向下转型
对象的向下转型,其实是一个[还原]的动作。
-
格式:
子类名称对象名= (子类名称)父类对象:
-
含义:
将父类对象,[还原] 成为本来的子类对象