java类的设计动物类.docx
- 文档编号:7227623
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:18
- 大小:170.50KB
java类的设计动物类.docx
《java类的设计动物类.docx》由会员分享,可在线阅读,更多相关《java类的设计动物类.docx(18页珍藏版)》请在冰豆网上搜索。
java类的设计动物类
《Java大作业实践》
报告
Animal公司的分析与设计
广东药学院
一.Animal类的设计要求:
根据实际需求设计Animal类,并完成以下功能:
1.输出全部信息
2.对2个实例进行比较
3.使用static对共同的属性进行修饰
4.实现从键盘输入的功能
5.实现单态设计模式
6.加异常信息
7.加入多线程
8.使用集合(可选)
二.设计场景,实现其要求
场景设计在一间公司,拥有很多的小猫小狗等宠物可以出卖。
1.输出9只动物的全部信息,举例代表全部动物的信息,并用List集合存放所有信息。
2.可以选择输入动物的信息来增加动物的数量,其中输入错误不能添加,并且进行了异常处理。
3.可以对动物的属性进行比较,例如年龄,名字等。
用到了方法的重载。
4.公司的动物的总数为共同属性和来源,用static修饰。
5.公司实现单态模式设计,所有动物都是属于这间公司的。
6.可以从键盘输入许多不同的选择,选择对动物进行不同的操作,并且所有的输入都进行了异常的处理。
7.采用多线程售卖动物,实现三个窗口同时售卖,并且进行了同步设计,保证安全。
8.利用ArrayList集合收集动物的年龄信息,并对其进行分析。
三.接口与类的基本设计
接口Animal(包涵四个抽象方法):
Stringprint();//姓名+年龄
Stringtalk();//姓名+他的声音
Stringall();//全部信息
voidinput();//输入数据
抽象父类A:
实现接口Animal
1.私有属性
privateStringname;
privateintage;
privateStringvoice;
privateStringbeizhu;//备注
共同属性
staticStringhouse="KFC";
staticintnum=200;
2.构造方法
3.抽象方法
publicabstractStringprint();
4.重写接口的部分抽象方法
5.对于封装的属性对外提供函数
Dog类:
继承A类
1.privateStringspec;//这个对象含有自己独特属性
2.构造方法
3.重写父类的方法:
publicStringtalk()
重写父类的抽象方法:
publicStringprint()
Cat类:
继承A类
1.构造方法
2.重写父类的抽象方法:
publicStringprint()
MyTh类(实现Runnable):
进行多线程售卖动物
Company类:
单态设计模式
T类:
测试功能(主函数)
四.其他函数功能块
1.publicstaticvoidanlyage(ArrayListage)//对年龄进行分析
2.publicstaticvoidrandonsale(Listname,Dogd)//随即卖掉X只动物
3.publicstaticvoidduosale(intnum)//开创3个窗口,多线程同步售卖
4.publicstaticvoidcampare(Stringa,Stringb)//两个实例的对比
publicstaticvoidcampare(inta,intb)//方法的重载
五.全部代码块
importjava.util.*;
//...........................................总接口.............................................
interfaceAnimal//总接口
{
Stringprint();//姓名+年龄
Stringtalk();//姓名+他的声音
Stringall();//全部信息
voidinput();//输入数据
}
//...........................................动物的父类.............................................
abstractclassAimplementsAnimal//动物的父类
{privateStringname;
privateintage;
privateStringvoice;
privateStringbeizhu;//备注
staticStringhouse="KFC";
staticintnum=200;
//父类的构造方法
publicA(){}
publicA(Stringname){setname(name);}
publicA(Stringname,intage)
{setname(name);
setage(age);
}
publicA(Stringname,intage,Stringvoice,Stringbeizhu)
{setname(name);
setage(age);
setvoice(voice);
setbeizhu(beizhu);
}
//重写抽象方法
publicabstractStringprint();//留给子类喜欢独自扩充的抽象方法
publicStringtalk()
{returngetname()+""+getvoice();};
publicStringall()
{returngetname()+""+getage()+""+getvoice()+""+
getbeizhu()+""+this.house;}
publicvoidinput()//输入数据
{Scannerinput1=newScanner(System.in);
try//this.name=input1.next();
{setname(input1.next());
setage(input1.nextInt());
setvoice(input1.next());
setbeizhu(input1.next());
A.num++;
}
catch(Exceptione)
{System.out.println(e);
setage(1000000);
System.out.println("输入有误");
//A.num--;
}
}
//封装
voidsetname(Stringname){this.name=name;}
Stringgetname(){returnname;}
voidsetage(intage)
{this.age=-999999;
if(age>=0)
this.age=age;
else
{A.num--;
try{thrownewIllegalArgumentException("年龄输入有误,不能为负数");}//在方法内部抛出异常IllegalArgumentException
catch(IllegalArgumentExceptione){System.out.println(e.getMessage());}
}
}
intgetage(){returnage;}
voidsetvoice(Stringvoice){this.voice=voice;}
Stringgetvoice(){returnvoice;}
voidsetbeizhu(Stringbeizhu){this.beizhu=beizhu;}
Stringgetbeizhu(){returnbeizhu;}
}
//...........................................单态设计模式.............................................
classCompany//单态设计模式
{staticStringcname;
privateCompany(Stringcname){ame=cname;}//单态设计模式核心
staticCompanyp=newCompany("CKFC");
staticpublicCompanygetC()
{returnp;}
};
//..........................................大狗类.............................................
classDogextendsA//继承
{privateStringspec;//这个对象含有自己独特属性
voidsetspec(Stringspec){this.spec=spec;}
Stringgetspec(){returnspec;}
Companyp1=Company.getC();
//小狗的构造方法
publicDog(){}
publicDog(Stringname)
{super(name);}
publicDog(Stringname,intage)
{super(name,age);}
publicDog(Stringname,intage,Stringvoice,Stringbeizhu)
{super(name,age,voice,beizhu);}
publicDog(Stringname,intage,Stringvoice,Stringbeizhu,Stringspec)
{super(name,age,voice,beizhu);
setspec(spec);
}
publicStringtalk()//子类“重写”父类的方法
{returngetname()+":
"+getvoice()+":
"+getspec()+""+ame;}
//重写抽象方法
publicStringprint()
{returngetname()+""+getage();}
}
//...........................................猫咪类.............................................
classCatextendsA
{publicCat(){}
publicCat(Stringname)
{super(name);}
publicCat(Stringname,intage)
{super(name,age);}
publicCat(Stringname,intage,Stringvoice,Stringbeizhu)
{super(name,age,voice,beizhu);}
//重写抽象方法
publicStringprint()
{returngetname()+""+getbeizhu();}
}
//..........................................多线程.............................................
classMyThimplementsRunnable
{intnum;
MyTh(){};
MyTh(intnum)
{this.num=num;};
publicvoidrun()
{while(num>0)
{
sale();
}
System.out.println("salestop!
");
}
synchronizedvoidsale()//同步方法
{if(num>0)
{try{Thread.sleep(0,1);}catch(Exceptione){}
System.out.println("sale:
"+Thread.currentThread().getName()+":
"+num--);
}
}
};
classT
{//...........................................主函数.............................................
publicstaticvoidmain(String[]args)
{System.out.println("输出动物的部分或全部信息");
System.out.println("姓名"+"年龄"+"声音"+"备注"+"公司");
Dogd1=newDog("dwangcai",6,"wanwan","nothing","iamagooddog!
");
Dogd2=newDog("dxiaohei",9,"wanwan","weakness");
Dogd3=newDog("dxiaocai",3,"wanwan","young");
Dogd4=newDog("dming",3,"wanwan","young");
Catc1=newCat("cmiao",5,"miaomiao","nothing");
Catc2=newCat("cxiaomi",1,"miaomiao","nothing");
Catc3=newCat("capple",3,"miaomiao","nothing");
Catc4=newCat("cwindy",4,"miaomiao","nothing");
Catc5=newCat("cmm",2,"miaomiao","nothing");
//信息数组
Listname=newArrayList();
name.add(d1.all());name.add(d2.all());name.add(d3.all());name.add(d4.all());
name.add(c1.all());name.add(c2.all());name.add(c3.all());name.add(c4.all());
name.add(c5.all());
for(inti=0;i System.out.println(name.get(i)); //测试输入对象 System.out.println("\n~~~~~~~~~~~~~~~~增加动物数量~~~~~~~~~~~~~~~"); intflag=0; System.out.print("输入0拒绝添加,输入1增加: "); Scannerinput1=newScanner(System.in); try{flag=input1.nextInt();} catch(Exceptione) { System.out.println(e); System.out.println("输入有误"); } intj=flag; if(j==1) {Catc10=newCat(); c10.input(); System.out.println(c10.all()); } else {System.out.println("NoNeed! ");} //年龄数组 ArrayListage=newArrayList(); age.add(d1.getage());age.add(d2.getage());age.add(d3.getage()); age.add(d4.getage()); age.add(c1.getage());age.add(c2.getage());age.add(c3.getage()); age.add(c4.getage());age.add(c5.getage()); //对年龄进行分析 anlyage(age); //随即卖掉X只动物 randonsale(name,d1); //多线程 duosale(d1.num); } //...........................................函数功能块............................................. //方法的重载 publicstaticvoidcampare(Stringa,Stringb) {System.out.println(a.equals(b)); } publicstaticvoidcampare(inta,intb) {System.out.println("较大的值: "+Math.max(a,b)); System.out.println("较小的值: "+Math.min(a,b)); } //多线程 publicstaticvoidduosale(intnum) { System.out.print("~~~~~~~~多线程需要买所有的动物吗? 按0否认,其他数字确定: "); inti=0; Scannerinput1=newScanner(System.in); try{i=input1.nextInt();} catch(Exceptione) { System.out.println(e); System.out.println("输入有误"); } intj=i; if(j! =0) {Runnabler=newMyTh(num); newThread(r).start(); newThread(r).start(); newThread(r).start(); } else System.out.println("over! "); } //卖多少只动物(随即抽取) publicstaticvoidrandonsale(Listname,Dogd) {System.out.print("\n~~~~~~~~~需要卖多少只动物,请输入: (数量少于"+d.num+"): "); intnum=0; Scannerinput1=newScanner(System.in); try{num=input1.nextInt();} catch(Exceptione) { System.out.println(e); System.out.println("输入有误"); } d.num=d.num-num; System.out.println("卖"+num+"只动物: "); Collections.shuffle(name); try { for(inti=0;i System.out.println(name.get(i)); } catch(Exceptione) {System.out.println(e); } System.out.println("最后剩余的数目为: "+d.num+"\n\n"); } //对动物年龄进行分析 publicstaticvoidanlyage(ArrayListage) {System.out.println("\n~~~~~~~~~~~~~~~~对动物年龄进行分析~~~~~~~~~~~~~~~"); Collections.sort(age); System.out.println("\n对动物年龄从低到高排序结果: "); for(inti=0;i System.out.print(age.get(i)+""); System.out.println("\n动物最大的是年龄: "+Collections.max(age));//最大数值 System.out.println("\n动物最小的是年龄: "+Collections.min(age));//最小数值 System.out.println("\n综合分析“"); /*inta=(int)Collections.max(age); for(inti=0;i<=a;i++) System.out.println("年龄为"+i+"岁的有: "+Collections.frequency(age,i));*/ } /*//增加动物数量 publicstaticvoidaddanimal() {System.out.println("\n~~~~~~~~~~~~~~~~增加动物数量~~~~~~~~~~~~~~~"); inti=0; System.out.print("请输入需要添加的数目: "); Scannerinput1=newScanner(System.in); try{i=input1.nextInt();} catch(Exceptione) { System.out.println(e); System.out.println("输入有误"); } for(intj=0;j {Catc10=newCat(); c10.input(); System.out.println(c10.all()) } }*/ } /*//输出两个实例比较 System.out.println("~~~~~~~~~~~~~~~~~~~输出两个实例比较~~~~~~~~~~~~~~"); campare(d1.getname(),c1.getname()); campare(d1.getage(),c1.getage()); System.out.println();*/ /*//测试单态设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 设计 物类