第三章 多态
多态
概念
多态是具有表现多种形的能力的特征。同一个实现接口,使用不同的实例而执行不同的操作
多态的用法
一、子类到父类的转换(向上转型)
简单的记忆就是:基本的数据类型转换
演示代码
Demo3_sl1_Pet pet=new Demo3_sl2_Dog("欧欧", "藏獒");
Demo3_sl1_Pet pet1=new Demo3_sl3_Penguin("西西", "男");
Demo3_sl1_Pet pet2=new Demo3_sl8_Cat("北北", "white");
Demo3_sl4_Master master=new Demo3_sl4_Master("小跳", 200);
master.feed(pet);
master.feed(pet1);
master.feed(pet2);
二、父类到子类的转换(向下转换)
简单的记忆:强制性数据类型转换
概念
将一个指向子类对象的父类引用赋给一个子类的引用
演示代码
int typeId=input.nextInt();
Demo3_sl1_Pet pet=master.getPet(typeId);
实现和使用多态的方式
-
使用父类作为方法的形参
public void feed(Demo3_sl2_Dog dog) { dog.eat(); }
-
使用父类作为方法返回值实现
Demo3_sl1_Pet pet=new Demo3_sl2_Dog("欧欧", "藏獒"); pet.eat(); pet.catchingFlyDisc(); Demo3_sl2_Dog dog=(Demo3_sl2_Dog)pet; //强制类型转换成狗的对象 dog.catchingFlyDisc(); //调用狗狗玩飞盘 Demo3_sl3_Penguin penguin=new Demo3_sl3_Penguin("西西", "女"); penguin.swimming();
instanceof运算符
语法
对象 instanceof 类或接口
用法
判断一个对象是否属于一个类或者实现了一个接口,结果为true或false
if(pet instanceof Demo3_sl2_Dog) {
Demo3_sl2_Dog dog=(Demo3_sl2_Dog)pet;
dog.catchingFlyDisc();
}else if (pet instanceof Demo3_sl3_Penguin) {
Demo3_sl3_Penguin penguin=(Demo3_sl3_Penguin)pet;
penguin.swimming();
}