多态:
多态并非多状态,而是多形态,子类既可以作为子类形态,也可以作为父类形态
如:一只猫既可看做猫,也可以看做动物
代码中体现多态:
一、父类引用指向子类对象(对象的向上转型)
格式:左侧父类的引用,指向右侧子类的对象:
父类名称 对象名 = new 子类名称();
或者: 接口名称 对象名 = new 实现类名称()
Animal animalA = new Cat();
Animal animalB = new Dog();
即将一个子类当做父类使用(把一个猫看做动物使用)
这样调用的时候,无论是猫还是狗,其参数类型都是其父类动物,更为方便。
二、对象的向下转型:(将父类还原成为本来的子类对象)
格式:
子类名称 对象名 = (子类名称) 父类对象
Cat cat = (Cat) animalA;
1.必须保证对象创建时就是猫,才能向下转型成为猫
2.若本来不是猫,非要向下转型成猫,会报错(类转换异常) 如:Cat cat = (Cat) animalB;
故使用instanceof关键字进行类型判断,可判断该animalA是否是猫:
if (animalA instanceof Cat) {
Cat cat = (Cat) animal;
}
if (animalA instanceof Dog) {
Dog dog = (Dog) animal;
}