什么是多态?
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用父类的引用指向子类的对象。
使用多态有什么优点?
1.减少类中代码量
2.提高代码的可扩展性和可维护性
使用多态的条件
1.编写具有继承关系的父类和子类
2.子类重写父类方法
3.使用父类的引用指向子类的对象
实现多态的两种形式
1.使用父类作为方法形参实现多态
//使用父类作为方法形参实现多态
public void eat( Pet pet ) {
pet.eat();
}
2.使用父类作为方法返回值类型实现多态
//使用父类作为方法返回值类型实现多态
public Pet getPet(String typeId ){
//方法体
}
多态中的向上转型(小转大-自动)和向下转型(大转小-强制)
向上转型:将子类对象作为父类对象使用
/*
*向上转型
*格式:父类名 对象名=new 子类名();
*/
Pet p=new Dog();
向下转型:将父类对象作为子类对象使用
/*
*向下转型:需要强转
*格式:子类名 对象名=(子类名)父类名;
*/
Dog d=(Dog)Pet;
向下转型需要用到instanceof 关键字,instanceof通常和强制类型转换结合使用。
instanceof判断一个对象是否为一个实例,向下转型必须保证对象原本就是这个子类,向下转型首先需要判断这两个类之间是否存在继承关系。
public class Master {
public void play(Pet pet){
if (pet instanceof Dog) { //如果传入的是狗
Dog dog = (Dog) pet;
dog.catchingFlyDisc();
}else if (pet instanceof Cat ) { //如果传入的是猫
Cat c = (Cat ) pet;
c.catchFish();
}
}
}