Java-使用多态实现主人给宠物投喂食物功能

Java-使用多态实现主人给宠物投喂食物功能

1. Pet Class

package cn.animal.output;

import java.util.Scanner;

/**
 * @author Jensen
 * {@data 2022/11/6}
 */

public abstract class Pet{
    /**
     * 与控制台进行交互
     */
    public Scanner scanner = new Scanner(System.in);
    /**
     *
     * @param name; //宠物名字
     * @param health; //宠物健康状态
     * @param love; // 与宠物亲密度
     * @param add ; //增加宠物亲密度默认阈值
     * @param decress; //减少宠物亲密度默认阈值
      */
    protected String name;
    protected int health = 100;
    protected int love = 80;
    protected static int add = 5;
    protected static int decress = 10;

    /**
     * 初始构造宠物的方法
      * @param name //宠物名字
     */
    public Pet(String name){
        this.name = name;
    }

    /**
     * 显示宠物基本状态;
     */
    public void status(){
        System.out.println("****宠物系统****\n您的宠物名字: "+this.name+
                "\n宠物健康: "+this.health+"\n宠物亲密度: "+this.love);
    }

    /**
     * 抽象宠物每次吃不同的食物
     */
    public abstract void eat();
}

2. Dog Class

package cn.animal.output;

import java.util.Scanner;

/**
 * @author Jensen
 * {@data 2022/11/6}
 */
public class Dog extends Pet{

    /**
     * @param(skill="技能")
     * @param(food="食物")
     */
    private String skill = "接飞盘";
    private String food = "狗粮";

    /**
     * 构造宠物名字进行Dog类初始化
     * @param name
     */
    public Dog(String name){
        /**
         * 访问直接父类对应的构造方法,一下表达式只能出现在构造方法中
         */
        super(name);
    }

    /**
     * 狗子的飞盘技能方法
     */
    public void catchingFlyDisc(){
        super.love += add;
        super.health -= decress;
        System.out.println("他正在玩: "+this.skill +" 健康: +"+add+" 亲密度: -"+decress);
    }

    /**
     * 这是在作业之外添加的狗狗控制方法达到一个循环控制作用
     */
    public void dogAction(Dog dog){
       lab:while(true){
           System.out.println("你想让你的 >>"+super.name+"<< 做什么操作: 1.吃东西 / 2.玩飞盘呢 / 3. 显示宠物状态 / 4.退出");
           int answer = scanner.nextInt();
           switch(answer){
               case 1:
                   dog.eat();
                   break;
               case 2:
                   dog.catchingFlyDisc();
                   break;
               case 3:
                   dog.status();
                   break;
               case 4:
                   System.out.println("退出啦!886");
                   break lab;
               default:
                   System.out.println(">>>Input error{500}");
                   break ;
           }
       }

    }

    /**
     * 通过feed出发dogAction进行操作功能
     * @param dog
     */
    public static void feed(Dog dog){
        dog.dogAction(dog);

    }

    /**
     * 通过Pet父类抽象重写吃饭时的方法
     */
    @Override
    public void eat(){
        super.love -= decress;
        super.health += add;
        System.out.println("他正在吃: "+this.food +" 健康: +"+add+" 亲密度: -"+decress);

    }
}

3. Penguin Class

package cn.animal.output;

/**
 * @author Jensen
 * {@data 2022/11/6}
 */
public class Penguin extends Pet{
    /**
     * @param skill //技能
     * @param food // 鱼
     */
    protected String skill = "游泳";
    protected String food = "鱼";
    /**
     * 初始化企鹅方法
     * @param name 企鹅名字
     */
    public Penguin(String name){
        super(name);
    }

    /**
     * 企鹅行为操作功能
     * @param pgn
     */
    public void penguinAction(Penguin pgn){
        lab:while(true){
            System.out.println("你想让你的 >>"+super.name+"<< 做什么操作: 1.吃东西 / 2.游泳 / 3. 显示宠物状态 / 4.退出");
            int answer = scanner.nextInt();
            switch (answer){
                case 1:
                    pgn.eat();
                    break;
                case 2:
                    pgn.swimming();
                    break;
                case 3:
                    pgn.status();
                    break;
                case 4:
                    System.out.println("退出啦! 886");
                    break lab;
                default:
                    System.out.println(">>>Input error {500}");
                    break;
            }
        }
    }
    /**
     * 通过feed调用penguinAction进行调用宠物相关功能
     * @param pgn
     */
    public static void feed(Penguin pgn){

    }

    /**
     * 游泳技能
     */
    public void swimming(){
        super.love += add;
        super.health -= decress;
        System.out.println("他正在玩: "+this.skill +" 健康: -"+ decress+" 亲密度: +"+add);
    }

    /**
     * 重写父类Pet抽象方法,实现不同类型宠物吃不同东西
     */
    @Override
    public void eat(){
        super.health += add;
        super.love -= decress;
        System.out.println("他正在吃: "+this.food +" 健康: +"+add+" 亲密度: -"+decress);
    }
}

4. Master Class

package cn.animal.output;

/**
 * @author Jensen
 * {@data 2022/11/6}
 */
public class Master {

    /**
     * 传入一个以父类Pet 生成的pet为null
     * 然后进行判断进行赋值达到类赋值的强转换
     * @param pet
     * @return
     */
    public static Pet play(Pet pet) {
        if (pet instanceof Dog){
            Dog.feed((Dog) pet);

        } else if (pet instanceof Penguin) {
            Penguin.feed((Penguin) pet);

        } else {
            System.out.println(">>>Instanceof error");
        }
        return pet;
    }

    /**
     * 选择宠物类型
     * @param ans
     * Pet getPet(int ans)以父类Pet作为返回值类型实现领养功能
     * 所以这里以return返回pet
     * @return
     *
     */
    public static Pet getPet(int ans) {
        Pet pet = null;
        if (ans == 1){
            pet = new Dog("大米");
        } else if (ans == 2) {
            pet = new Penguin("小企");
        }
        return pet;
    }
}

5. TestRun Class

package cn.animal.output;

import java.util.Scanner;

/**
 * @author Jensen
 * {@data 2022/11/6}
 */

/**
 * 这个类实现四个类的功能方法调用
 */
public class TestRun {
    public static final Scanner scanners = new Scanner(System.in);

    /**
     * 与控制台实现交互进行选择
     */
    public static void start(){
        System.out.println("请输入: 1.狗子 /2.企鹅");
        int answer = scanners.nextInt();
        /**
         * 通过answer进行判断输入进行赋值给getPet进行pet赋值
         */
        Pet pet = Master.getPet(answer);
        if (pet!=null){
            System.out.println(">>>>领养成功!");
            Master.play(pet);
        }else {
            System.out.println(">>>Sorry start error {500}");
        }
    }

    public static void main(String[] args) {
        start();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值