【学生喂养三种宠物:猫、狗和鸟】

该博客介绍了使用Java编程实现学生喂养不同类型的宠物(猫、狗、鸟)的场景。通过创建动物类、猫类、狗类、鸟类以及学生类,展示了类的继承、多态和方法重写。学生类中的feed方法根据动物类型调用不同的行为方法,如移动、吃食等。最后通过测试类运行程序,观察输出结果。但原始代码缺少动物的玩耍行为展示,可通过对象向下转型解决这一问题。
摘要由CSDN通过智能技术生成

(一)编程实现

1、创建动物类

/**
 * 功能:动物类
 * 作者:许锐
 * 日期:2022年05月12日
 */
public class Animal {
        private String name;
        private int age;

        public String getName() {
            return name;
        }

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

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public void speak() {
            System.out.println(name + "今年"  + age + "岁了。");
        }

        public void move() {
            System.out.println(name + "在动……");
        }

        public void eat() {
            System.out.println(name + "在吃……");
        }

        @Override
        public String toString() {
            return "Animal{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }

2、继承动物类,创建猫类

/**
 * 功能:猫类
 * 作者:许锐
 * 日期:2022年05月12日
 */
    public class cat extends Animal {
        /**
         * 子类改写父类的同名同参方法(纵向多态)
         */
        @Override
        public void move() {
            System.out.println("猫咪[" + getName() + "]在走路。");
        }

        /**
         * 子类改写父类的同名同参方法(纵向多态)
         */
        @Override
        public void eat() {
            System.out.println("猫咪[" + getName() + "]爱吃鱼虾。");
        }

        /**
         * 子类添加新的方法
         */
        public void play() {
            System.out.println("猫咪[" + getName() + "]在玩老鼠。");
        }
    }

3、继承动物类,创建狗类

/**
 * 功能:狗类
 * 作者:许锐
 * 日期:2022年05月12日
 */
    public class Dog extends Animal {
        /**
         * 子类改写父类的同名同参方法(纵向多态)
         */
        @Override
        public void move() {
            System.out.println("狗崽[" + getName() + "]在蹦跳。");
        }

        /**
         * 子类改写父类的同名同参方法(纵向多态)
         */
        @Override
        public void eat() {
            System.out.println("狗崽[" + getName() + "]爱吃骨头。");
        }

        /**
         * 子类添加新的方法
         */
        public void play() {
            System.out.println("狗崽[" + getName() + "]在玩飞盘。");
        }
    }

4、继承动物类,创建鸟类

/**
 * 功能:鸟类
 * 作者:许锐
 * 日期:2022年05月12日
 */
    public class Bird extends Animal {
        /**
         * 子类改写父类的同名同参方法(纵向多态)
         */
        @Override
        public void move() {
            System.out.println("鸟儿[" + getName() + "]在飞翔。");
        }

        /**
         * 子类改写父类的同名同参方法(纵向多态)
         */
        @Override
        public void eat() {
            System.out.println("鸟儿[" + getName() + "]爱吃小虫。");
        }

        /**
         * 子类添加新的方法
         */
        public void play() {
            System.out.println("鸟儿[" + getName() + "]在玩羽毛。");
        }
    }

5、创建学生类

/**
 * 功能:学生类
 * 作者:许锐
 * 日期:2022年05月12日
 */
public class Student {
        private String name;

        public String getName() {
            return name;
        }

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

        public void feed(Animal animal) {
            if (animal instanceof cat) { // 判断是否是猫实例
                System.out.println(name + "喂养猫咪[" + animal.getName() + "]。");
            } else if (animal instanceof Dog) { // 判断是否是狗实例
                System.out.println(name + "喂养狗崽[" + animal.getName() + "]。");
            } else if (animal instanceof Bird) { // 判断是否是鸟实例
                System.out.println(name + "喂养鸟儿[" + animal.getName() + "]。");
            } else {
                System.out.println(name + "喂养动物[" + animal.getName() + "]。");
            }
            animal.speak(); // 子类继承了父类的方法
            animal.move(); // 体现多态(子类改写了父类的同名同参方法)
            animal.eat(); // 体现多态(子类改写了父类的同名同参方法)
        }
    }

6、创建测试学生类

/**
 * 功能:测试学生类
 * 作者:许锐
 * 日期:2022年05月05日
 */
public class TestStudent {
        public static void main(String[] args) {
            // 创建学生对象
            Student student = new Student();
            student.setName("张三丰");

            // 创建第一个动物
            Animal animal1 = new cat();
            animal1.setName("欣欣");
            animal1.setAge(4);

            // 创建第二个动物
            Animal animal2 = new Dog();
            animal2.setName("翠翠");
            animal2.setAge(5);

            // 创建第三个动物
            Animal animal3 = new Bird();
            animal3.setName("豆芽");
            animal3.setAge(3);

            // 调用学生对象的喂养方法,传入不同的动物对象
            student.feed(animal1);
            student.feed(animal2);
            student.feed(animal3);
        }
    }

7、运行程序,查看结果

运行TestStudent类
在这里插入图片描述
美中不足之处:运行结果当中没有显示出各种动物的玩法
修改Student类,直接添加一句animal.play(),但是要报错,怎么办呢?
此时,我们要利用对象的向下转型(downcasting)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值