问题
分析:
public class Master { public void feed( Dog dog ) { dog.eat(); } public void feed( Penguin pgn ) { pgn.eat(); } public void feed( XXX xxx ) { xxx.eat(); } … … }… … Master master = new Master(); master.feed(dog); master.feed(penguin); master.feed(xxx); … …
实现多态的三个要素:
编写具有继承关系的父类和子类
子类重写父类方法
使用父类的引用指向子类的对象
向上转型:
Pet pet = new Dog();
自动类型转换
实现多态的两种形式
使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态
使用多态优化主人给宠物喂食
父类到子类的转换
向下转型(强制类型转换)
instanceof运算符
public class Master { public void play(Pet pet){ if (pet instanceof Dog) { //如果传入的是狗狗 Dog dog = (Dog) pet; dog.catchingFlyDisc(); }else if (pet instanceof Penguin) { //如果传入的是企鹅 Penguin pgn = (Penguin) pet; pgn.swimming(); } } }使用的多态有什么好处?
提高代码的的简洁性
提高了代码的可扩展性和可维护性
