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方法实例化子类是对多态的使用。