实例分析----宠物商店

时间:2021-02-28 08:56:17

1、设计要求

  实现一个宠物商店,在宠物商店中可以有很多种类宠物,(由用户自己设定) 尝试表示出此种关系,并根据要求可以根据关键字查找到宠物信息。

2、程序分析

  (1)提示信息自己设置,由此简单设置出啊三个属性 名字 颜色 年龄

  (2)宠物种类有很多,所以宠物应该是一个标准 及    

  (3)在宠物商店中 只要符合这种关系的就放在宠物商店中,

  (4)宠物商店要保存好多种宠物 所以应该是一个数组,数组的个数由用户决定的话,则应该在创建宠物对象时就分配好所能保存的宠物个数。

实例分析----宠物商店

宠物接口-------- Pet.java

public interface Pet {
    public String getName();
    public String getColor();
    public int getAge();
    

}

宠物猫---------------Cat.java

package com.PetShop;

public class Cat implements Pet {
    private String name;
    private String color;
    private int age;
    public Cat(String name,String color,int age){
        this.setAge(age);
        this.setColor(color);
        this.setName(name);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

宠物狗------------Dog.java

package com.PetShop;

public class Dog implements Pet{
    private String name;
    private String color;
    private int age;
    public Dog(String name, String color, int age){
        this.setAge(age);
        this.setColor(color);
        this.setName(name);
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

此处定义了两种代码,如果有更多的宠物,则只实现Pet接口即可,

下面开始定义宠物商店类,在宠物商店类中应该包含一个宠物接口的对象数组。

宠物商店 PetShop.java

package com.PetShop;

public class PetShop {
    private Pet[] pets;                       //定义数组,保存多个属性;
    private int foot;                         //数据保存的位置.
    public PetShop(int len){                  //构造方法开辟宠物数组的大小
        if(len>0){                            //判断输入要求开辟的空间的是否大于0,
            this.pets = new Pet[len];          
        }else{
            this.pets = new Pet[1];
        }
    }
    public boolean add(Pet pet){               //   将宠物装入数组,首先判断数组是否装满,如果没有装满,则将宠物装入数组,同时
        if(this.foot<this.pets.length){        //   角标foot自增。
            this.pets[this.foot]= pet;         
            this.foot++;
            return true;
        }else {
            return false;
        }
    }
    public Pet[] search(String KeyWord){       //关键字查找
        Pet p[] = null;                        //此为查找之后的结果
        int count = 0;                         // 记录有多少个宠物符条件,
        for(int i = 0;i< this.pets.length;i++){//判断对象数组中是否有内容
            if (this.pets[i]!=null) {
                if (this.pets[i].getName().indexOf(KeyWord)!=-1 
                    ||this.pets[i].getColor().indexOf(KeyWord)!=-1){
                    count++;                   //统计符合条件的宠物数量
                }
            }
        }
        p = new Pet[count];                    //根据已有的记录数,开辟数组
        int f = 0;                             //和count同理  为返回数组p的大小开辟空间做准备。
        for (int i = 0; i <this. pets.length; i++) {
            if (this.pets[i]!= null) {
                if (this.pets[i].getName().indexOf(KeyWord)!=-1 
                    ||this.pets[i].getColor().indexOf(KeyWord)!= -1){
                        p[f] = this.pets[i];
                        f++;
                    }
                }
                
            }
        
        return p;
        
    }
}

测试程序 PetShopDemo.java

package com.PetShop;

public class PetShopDemo {
    public static void main(String[] args) {
        PetShop ps = new PetShop(5);
        ps.add(new Cat("白猫", "白色的", 2));
        ps.add(new Cat("黑猫", "黑色的", 3));
        ps.add(new Cat("花猫", "花色的", 3));
        ps.add(new Dog("拉布拉多", "黄色的", 2));
        ps.add(new Dog("金毛", "金色的", 2));
        ps.add(new Dog("黄狗狗", "黑色的", 2));
        print(ps.search("黄"));
    }

    private static void print(Pet p[]) {
        for (int i = 0; i < p.length; i++) {
            if (p[i]!=null) {
                System.out.println(p[i].getName()+
                        ","+p[i].getColor()+
                        ","+p[i].getAge());
            }
        }
        
    }

}

测试结果

实例分析----宠物商店

总结:

 
此程序时对接口和继承的练习, 在测试类中定义了一个接口类型的ps(父类)数组,由接口数组去调用add方法实例化子类是对多态的使用。