最近学习了java基础中的封装、继承、多态和集合,写了一个简单地案例。对于不太懂这方面的新手希望会有助于你们理解,如果是大神可以提出改进意见,谢谢。关于这方面的概念性的东西我也解释不好,所以就不多说了。
本案例没有用到和抽象类接口。简单介绍一下这个案例:《宠物商店》
功能,宠物商店可以进购宠物,可以出售宠物。宠物具有吃东西和玩耍的能力,宠物主人可以在宠物商店购买宠物,可以给宠物起名字,可以陪宠物玩,喂宠物。主人每次与宠物有关的行为都会增加宠物与主人的亲密值。有些功能没有完善,也有些方法没有在测试类里实现,希望小伙伴们可以完善一下,也希望能多提一些改进意见。java~java~java~
案例中用到的一些其他比较关键性知识:
instanceof 用于比较两个对象是否为同一类型或者是继承关系。
重写了equals方法和hashCode方法,防止向宠物的HashMap集合中行添加同一种对象。
重写了toString方法,便于打印宠物信息。
下面是每一种类的简单介绍:
1.Pet.java ,宠物类 ,有各种属性,其中重写了equals方法,hashCode方法,toString方法
属性:private String id; //id
private String strain; //品种
private int loveNum; //与主人的亲密值
private int num; //数量
private String name; //爱宠的名字
public static List petSpecies;private String id;//存放宠物种类的集合
2.Dog.java ,宠物狗类,继承了Pet.java,也就代表着继承了Pet.java中的equals等方法。重写了Pet.java中的eat()和play()方法。
3.Cat.java,宠物猫类, 继承了Pet.java。重写了Pet.java中的eat()和play()方法。
4.PetShop.java,宠物商店类, 拥有一个HashMap集合,名为pets,类似于宠物店中的笼子,存放着各种宠物供顾客购买。
5.Master.java,主人类,宠物的主人,有一个ArrayList集合,名为myPets,用于保存自己所拥有的宠物的记录。
6.Test.java,测试类,也可以说是实现类。
下面是完整的代码:
import java.util.ArrayList;
import java.util.List;
public class Pet {
private String id;
private String strain;
private int loveNum;
private int num;
private String name;
public static List petSpecies;
static { //静态代码块,只会在第一次执行构造方法的时候执行,初始化petSpecies集合
petSpecies = new ArrayList();
petSpecies.add(new Pet("001","波斯猫",0,9999));
petSpecies.add(new Pet("002","加菲猫",0,9999));
petSpecies.add(new Pet("003","哈士奇",0,9999));
petSpecies.add(new Pet("004","中华田园犬",0,9999));
petSpecies.add(new Pet("005","中华田园猫",0,9999));
petSpecies.add(new Pet("006","牧羊犬",0,9999));
System.out.println("id\t品种");
for(Pet pet:petSpecies) {
System.out.println(pet);
}
}
public Pet(String id,String strain, int loveNum,int num) {
this.strain = strain;
this.id = id;
this.loveNum = loveNum;
this.num = num;
}
public Pet(){
}
//商店进购宠时,根据商家所选的id和数量给商家返回宠物
public static Pet givePetToShop(String petId,int petNum) {
Pet pet = null;
for(Pet p:petSpecies) {
if(p.getId().equals(petId)) {
pet = p;
pet.setNum(petNum);
return pet;
}
}
return pet;
}
public void eat() {
System.out.println(strain+"正在开心的吃东西");
}
@Override//重写toString方法
public String toString() {
return this.id+"\t" + this.strain +"\t";
}
@Override//重写hashCode方法
public int hashCode() {
return this.getId().hashCode();
}
@Override//重写equals方法
public boolean equals(Object obj) {
if(obj instanceof Pet) {//判断obj类是否为Pet类或Pet的子类
Pet other = (Pet)obj;
if(this.getId().equals(other.getId())) {
if(this.getStrain().equals(other.getStrain())) {
return true;
}
}
}
return false;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.