多态的可扩展性动物行为实例 day09

package com.shujia.day09;

import java.nio.channels.Pipe;

/*
    多态的好处
        1、提高了程序的维护性(由继承保证)
        2、提高了程序的扩展性(由多态保证)

 */
class Animal{
    String name;
    int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println("吃");
    }

    public void sleep(){
        System.out.println("睡");
    }
}

class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("🐕吃🥩");
    }

    @Override
    public void sleep() {
        System.out.println("🐕侧着睡");
    }
}

class Pig extends Animal{
    @Override
    public void eat() {
        System.out.println("🐖吃杂食");
    }

    @Override
    public void sleep() {
        System.out.println("🐖趴着睡");
    }
}

class Snake extends Animal{
    @Override
    public void eat() {
        System.out.println("🐍吃🐀");
    }

    @Override
    public void sleep() {
        System.out.println("🐍盘着睡");
    }
}

class Tiger extends Animal{
    @Override
    public void eat() {
        System.out.println("🐅吃🥩");
    }

    @Override
    public void sleep() {
        System.out.println("🐅趴着睡");
    }
}

//写一个工具类,对每一个动物调用吃和睡的功能
class AnimalTool{
    private AnimalTool(){}

//    public static void useDog(Dog dog){
//        dog.eat();
//        dog.sleep();
//    }
//
//    public static void usePig(Pig pig){
//        pig.eat();
//        pig.sleep();
//    }
//
//    public static void useSnake(Snake snake){
//        snake.eat();
//        snake.sleep();
//    }

    public static void useAnimal(Animal animal){ //Animal animal = new Tiger();
        animal.eat();
        animal.sleep();
    }
}




public class DuoTaiDemo5 {
    public static void main(String[] args) {
        //我想一只🐕
        Dog d1 = new Dog();
//        d1.eat();
//        d1.sleep();
        //使用工具类的方式调用动物的吃和睡的功能
//        AnimalTool.useDog(d1);
        AnimalTool.useAnimal(d1);

        //我想一只🐖
        Pig p2 = new Pig();
//        p2.eat();
//        p2.sleep();
//        AnimalTool.usePig(p2);
        AnimalTool.useAnimal(p2);

        //我想养🐍
        //按照上面的写法,应该先写一个🐍的类,然后在类中重写eat和sleep方法
        //在工具类中添加一个调用🐍的吃和睡的方法
        Snake s1 = new Snake();
//        AnimalTool.useSnake(s1);
        AnimalTool.useAnimal(s1);

        //随着我们要养动物的种类越来越多,每一种动物都需要经过上面两个步骤
        //创建该动物的类我们能理解,这是必须要有的
        //但是第二步在工具类进行添加修改其实是有问题。
        //今后的开发中,工具类是不允许频繁修改的。
        //但是我们不添加方法的话,就没法使用工具类调用具体动物的功能
        //于是,我们就在想,怎么可以只在工具类中写一个方法,可以调用所有动物的功能呢?
        //可以使用多态来实现。
        //我现在养一只🐅
        Tiger t1 = new Tiger();
        AnimalTool.useAnimal(t1); // new Tiger()


    }
}
posted @ 2024-08-05 20:42  ていせい  阅读(3)  评论(0编辑  收藏  举报