多态案例

1宠物饿了,不同宠物吃的东西不一样(大象吃香蕉,小鸡吃米)
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();
    }

}
3在Master类中多次添加feed()导致代码冗余怎么办? 
修改Master类,添加feed(Pet pet)方法
public class Master {
    public void feed(Pet pet){
        System.out.println("主人喂食...");
        pet.eat();
    }
}
4实现主人通过小卡片领养宠物
思路: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类型是否属于狗类型

 

posted @ 2023-06-07 16:49  meed  阅读(37)  评论(0)    收藏  举报