10.11(动物园管理员)

发布时间 2023-10-11 20:36:59作者: 徐星凯

第一版:

把每种动物都定义为一个类,漏洞大,每天加一种动物或者动物数量发生变化都会需要对代码进行调整

每种动物的喂食函数名也不同

package homework;

public class text

{

    public static void main(String args[])
    {

        Feeder f = new Feeder("小王");


        f.feedLion(new Lion());
        

        for (int i = 0; i < 10; i++)
        {

            f.feedMonkey(new Monkey());

        }


        for (int i = 0; i < 5; i++)
        {

            f.feedPigeon(new Pigeon());

        }

    }

}


class Feeder
{


    public String name;


    public Feeder(String name)
    {

        this.name = name;

    }


    public void feedLion(Lion l)
    {

        l.eat();

    }


    public void feedPigeon(Pigeon p)
    {

        p.eat();

    }


    public void feedMonkey(Monkey m)
    {

        m.eat();

    }

}


class Lion
{


    public void eat()
    {

        System.out.println("吃肉");

    }

}


class Monkey
{

    public void eat()
    {

        System.out.println("吃香蕉");

    }

}


class Pigeon
{


    public void eat()
    {

        System.out.println("吃大米");

    }

}

第二版:

相比于第一版来说,定义了一个抽象类,统一了各种动物喂食的函数,使得主函数变得更加的简洁

package homework;
public class text
{


    public static void main(String args[])
    {

        Feeder f = new Feeder("小王");


        f.feedAnimal(new Lion());

        for (int i = 0; i < 10; i++)
        {

            f.feedAnimal(new Monkey());

        }


        for (int i = 0; i < 5; i++)
        {

            f.feedAnimal(new Pigeon());

        }

    }

}


class Feeder
{


    public String name;


    Feeder(String name)
    {

        this.name = name;

    }


    public void feedAnimal(Animal an)
    {

        an.eat();

    }

}

//定义抽象类作为父类
abstract class Animal
{

//抽象函数eat
    public abstract void eat();

}

//在下面定义各种动物,继承上面的抽象类
class Lion extends Animal
{


    public void eat()
    {

        System.out.println("吃肉·");

    }

}


class Monkey extends Animal
{


    public void eat()
    {

        System.out.println("吃香蕉");

    }

}


class Pigeon extends Animal
{


    public void eat()
    {

        System.out.println("吃大米");

    }

}

第三版:

利用了增强for循环,将各种动物都统一的存在一个Animal数组之中,代码更简洁,省去了调用喂食函数时的循环

package homework;


public class text {

    public static void main(String args[]) {
        Feeder f = new Feeder("小王");
        Animal[] ans = new Animal[16];
        //将各种动物排成一个数组
        ans[0] = new Lion();

        for (int i = 0; i < 10; i++) {
            ans[1 + i] = new Monkey();
        }

        for (int i = 0; i < 5; i++) {
            ans[11 + i] = new Pigeon();
        }

        f.feedAnimals(ans);
    }
}

class Feeder {

    public String name;

    Feeder(String name) {
        this.name = name;
    }

    public void feedAnimals(Animal[] ans) {
        for (Animal an : ans) {
            an.eat();
        }
    }
}

abstract class Animal {

    public abstract void eat();
}

class Lion extends Animal {

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

class Monkey extends Animal {

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

class Pigeon extends Animal {

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

第四版:

利用了vector容器,vector容器可以动态的添加数组内容,若有动物数量发生变化,更加容易调整。

package homework;
import java.util.Vector;
public class text {

    public static void main(String args[]) {
        Feeder f = new Feeder("小王");
        Vector<Animal> ans = new Vector<Animal>();

        
        ans.add(new Lion());
        
        for (int i = 0; i < 10; i++) {
            ans.add(new Monkey());
        }

        for (int i = 0; i < 5; i++) {
            ans.add(new Pigeon());
        }
        f.feedAnimals(ans);
    }
}

class Feeder {

    public String name;

    Feeder(String name) {
        this.name = name;
    }

    public void feedAnimals(Vector<Animal> ans) {
        for (Animal an : ans) {
            an.eat();
        }
    }
}

abstract class Animal {

    public abstract void eat();
}

class Lion extends Animal {

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

class Monkey extends Animal {

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

class Pigeon extends Animal {

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