JAVA封装继承多态案例分析_java基础,封装,继承,多态,集合的综合案例

最近学习了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.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值