多态事例

package com.epilogue.zuoye;

import java.util.Scanner;

public class Demo {

    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("欢迎来到宠物店,请选择想要购买的宠物:1.小狗\t2.小猫");
        int choice = input.nextInt();
        Pet pet = null;
        if (choice == 1) {
            System.out.println("购买成功!");
            System.out.println("为你的小狗取个名字吧");
            String name = input.next();
            pet = new Dog();
            Home(pet, name);
        } else if (choice == 2) {
            System.out.println("购买成功!");
            System.out.println("为你的小猫取个名字吧");
            String name = input.next();
            pet = new Cat();
            Home(pet, name);
        } else {
            System.out.println("选择错误");
        }
    }

    public static void Home(Pet pet, String name) {
        pet.setName(name);// 设置初始值
        pet.setHealth(100);
        pet.setIntimate(0);
        pet.setHunger(0);
        System.out.println("当前小狗的状态:\n名字:" + pet.getName() + "健康值:"
                + pet.getHealth() + "饥饿值:" + pet.getHunger() + "亲密值:"
                + pet.getIntimate());
        while (true) {
            if (pet instanceof Dog) {// 父类对子类的引用
                System.out.println("您想要和您的宠物做什么呢?1.喂食\t2.玩耍\t3.看家");
            }
            if (pet instanceof Cat) {
                System.out.println("您想要和您的宠物做什么呢?1.喂食\t2.玩耍\t3.抓老鼠");
            }
            int i = input.nextInt();
            switch (i) {
            case 1:
                pet.eatAble();
                break;
            case 2:
                pet.playAble();
                break;
            case 3:
                if (pet instanceof Dog) {
                    ((Dog) pet).lookHome();// 自下转型
                }
                if (pet instanceof Cat) {
                    ((Cat) pet).catchMouse();
                }
                break;
            default:
                System.out.println("选择错误,请重新选择");
            }
        }
    }
}

interface Able {// 创建Able接口
    void eatAble();

    void playAble();
}

class Pet implements Able {// 创建一个Pet对象,继承Able接口
    private String name;
    private int health;
    private int hunger;
    private int intimate;

    // 封装方法
    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public int getIntimate() {
        return intimate;
    }

    public void setIntimate(int intimate) {
        this.intimate = intimate;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public int getHunger() {
        return hunger;
    }

    public void setHunger(int hunger) {
        this.hunger = hunger;
    }

    @Override
    public void eatAble() {
        health += 5;
        if (health > 100) {
            health = 100;
        }
        hunger -= 3;
        if (hunger < 0) {
            hunger = 0;
        }
        intimate += 3;
        if (intimate < 0) {
            intimate = 0;
        }
        if (intimate > 100) {
            intimate = 100;
        }

        System.out.println(name + "的状态:\n健康值:" + health + "饥饿值:" + hunger
                + "亲密值:" + intimate);
    }

    // 实现接口方法
    @Override
    public void playAble() {
        health -= 5;
        if (health < 0) {
            health = 0;
        }
        hunger += 5;
        if (hunger > 100) {
            hunger = 100;
        }
        intimate += 3;
        if (intimate > 100) {
            intimate = 100;
        }
        System.out.println(name + "的状态:\n健康值:" + health + "饥饿值:" + hunger
                + "亲密值:" + intimate);
    }

}

class Dog extends Pet implements Able {
    void lookHome() {// 添加Dog自己特有的方法
        String name = super.getName();
        int health = super.getHealth();
        health -= 3;
        if (health < 0) {
            health = 0;
        }
        setHealth(health);
        int hunger = super.getHunger();
        hunger += 3;
        if (hunger > 100) {
            hunger = 100;
        }
        setHunger(hunger);
        int intimate = super.getIntimate();
        intimate -= 3;
        if (intimate < 0) {
            intimate = 0;
        }
        setIntimate(intimate);
        System.out.println("看家ing。。。");
        System.out.println(name + "的状态:\n健康值:" + health + "饥饿值:" + hunger
                + "亲密值:" + intimate);
    }

    @Override
    public void eatAble() {// 实现接口方法,继承父类
        super.eatAble();
        System.out.println("成功喂食");
    }

    @Override
    public void playAble() {
        super.eatAble();
        System.out.println("玩得很高兴");
    }
}

class Cat extends Pet implements Able {
    void catchMouse() {// 添加Cat自己特有的方法
        String name = super.getName();
        int health = super.getHealth();
        health -= 3;
        if (health < 0) {
            health = 0;
        }
        setHealth(health);
        int hunger = super.getHunger();
        hunger += 3;
        if (hunger > 100) {
            hunger = 100;
        }
        setHunger(hunger);
        int intimate = super.getIntimate();
        intimate -= 3;
        if (intimate < 0) {
            intimate = 0;
        }
        setIntimate(intimate);
        System.out.println("抓老鼠ing。。。");
        System.out.println(name + "的状态:\n健康值:" + health + "饥饿值:" + hunger
                + "亲密值:" + intimate);
    }

    @Override
    public void eatAble() {// 实现接口方法,继承父类
        super.eatAble();
        System.out.println("成功喂食");
    }

    @Override
    public void playAble() {
        super.playAble();
        System.out.println("玩得很高兴");
    }
}

 

posted @ 2016-07-16 13:44  Epilogue  阅读(167)  评论(0编辑  收藏  举报