多态案例
1宠物饿了,不同宠物吃的东西不一样(大象吃香蕉,小鸡吃米)
3在Master类中多次添加feed()导致代码冗余怎么办?
修改Master类,添加feed(Pet pet)方法
4实现主人通过小卡片领养宠物
思路:Master中添加Pet getPet(int typeId)
public abstract class Pet { public abstract void eat(); }
2如果需要主人给宠物喂食,怎么办?
public class Dog extends Pet{ public void eat() { System.out.println("吃狗粮..."); } }
public class Penguin extends Pet{ public void eat() { System.out.println("吃鱼..."); } }
添加Master类,实现给XXX喂食feed(xx)的方法
public class Master { public void feed(Dog dog){ System.out.println("主人喂..."); dog.eat(); } public void feed(Penguin penguin){ System.out.println("主人喂..."); penguin.eat(); } }
修改Master类,添加feed(Pet pet)方法
public class Master { public void feed(Pet pet){ System.out.println("主人喂食..."); pet.eat(); }
}
思路:Master中添加Pet getPet(int typeId)
public class Master { public Pet getPet(int typeId){ Pet pet =null; if(typeId==1){ pet = new Dog(); }else if(typeId==2){ pet = new Penguin(); } return pet; } }
5实现主人与宠物玩耍功能
和大象玩"踢球"游戏
和小鸡玩"老鹰捉小鸡"游戏
public class Master {
public void play(Pet pet){ if(pet instanceof Dog){ Dog dog = (Dog)pet; dog.catchFlyDisc(); }else if(pet instanceof Penguin){ Penguin penguin = (Penguin) pet; penguin.swimming(); } }
}
public class Dog extends Pet{ public void catchFlyDisc(){ System.out.println("接飞盘...."); } } public class Penguin extends Pet{ public void swimming(){ System.out.println("游泳....."); } }
6.多态定义
父类引用指向子类对象
7.实现多态的三要素
(1)编写具有继承关系的父类和子类(关键字extends) (2)子类重写父类方法 (3)使用父类的引用指向子类的对象
8.多态的表现形式
(1)将父类作为方法形参实现多态 (2)将父类作为方法返回值实现多态
9.多态的向上、向下转型
(1)多态中的向上转型 子类到父类的转换可以自动进行,称之为向上转型; (2)多态中的向下转型 父类转换成子类,向下转型(强制类型转换)
10.instanceof运算符
特性:instanceof通常和强制类型转换结合使用
定义: Pet instanceof Dog 判断Pet类型是否属于狗类型

浙公网安备 33010602011771号