多态性和GUI.docx
- 文档编号:12687780
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:29
- 大小:226.55KB
多态性和GUI.docx
《多态性和GUI.docx》由会员分享,可在线阅读,更多相关《多态性和GUI.docx(29页珍藏版)》请在冰点文库上搜索。
多态性和GUI
实验报告
(2015/2016学年第1学期)
课程名称
JAVA语言程序设计
实验名称
多态性
实验时间
2015
年
12
月
8
日
指导单位
软件工程系
指导教师
学院(系)
专业
学生姓名
班级学号
实验名称
多态性
指导教师
杨健
实验类型
验证
实验学时
2
实验时间
2015/12/8
一、实验目的
(1)、掌握多态性的实现。
(2)、掌握抽象类和抽象方法的定义和使用。
(3)、掌握接口的定义和实现。
二、实验环境(实验设备)
Eclipse
三、实验内容
(1)、人员类的多态性设计。
设计一个人员类(Person),其中包含一个方法pay,代表人员的工资支出。
再从Person类派生出助教类(Assistant)、讲师类(Instructor)、副教授类(AssistantProfesson)和教授类(Professon)。
其中,工资支出=基本工资+授课时数×每课时兼课金。
但助教基本工资为800元,每课时兼课金25元,讲师基本工资为1000元,每课时兼课金35元,副教授基本工资为1200元,每课时兼课金40元,教授基本工资1400元,每课时兼课金50元。
将Person定义为抽象类,pay为抽象方法,设计程序实现多态性。
将Person定义为接口,设计程序实现多态性。
(2)利用applet画出多个图,实现图形的多态性设计。
仔细阅读下面的5个程序,根据注解信息的提示,将程序中空缺的部分(由/*…..*/标注)补充完整,并上机调试正确,使程序运行的结果是在applet的容器中画出多种图形。
实验代码:
(1):
将Person定义为抽象类,pay为抽象方法,设计程序实现多态性。
package多态性;
publicclassaa{
publicstaticvoidmain(Stringargs[]){
Personps[]=newPerson[4];
ps[0]=newAssistant("张三",120);
ps[1]=newInstructor("赵二",130);
ps[2]=newAssistantProfesson("李四",125);
ps[3]=newProfessor("王五",134);
Stringoutput="";
for(inti=0;i output+=ps[i].toString(); System.out.println(output); } } package多态性; abstractclassPerson{ protectedStringname; protecteddoubleclasssum; publicPerson(){ this.name=""; classsum=0; } publicPerson(Stringname,doubleclasssum){ this.name=name; this.classsum=classsum; } publicabstractdoublepay(); } classAssistantextendsPerson{ publicAssistant(Stringname,doubleclasssum){ super(name,classsum); } publicdoublepay(){ return800+classsum*25; } publicStringtoString(){ return"姓名: "+this.name+"\t工资支出: "+this.pay()+"\n"; } } classInstructorextendsPerson{ publicInstructor(Stringname,doubleclasssum){ super(name,classsum); } publicdoublepay(){ return1000+classsum*35; } publicStringtoString(){ return"姓名: "+this.name+"\t工资支出: "+this.pay()+"\n"; } } classAssistantProfessonextendsPerson{ publicAssistantProfesson(Stringname,doubleclasssum){ super(name,classsum); } publicdoublepay(){ return1200+classsum*40; } publicStringtoString(){ return"姓名: "+this.name+"\t工资支出: "+this.pay()+"\n"; } } classProfessorextendsPerson{ publicProfessor(Stringname,doubleclasssum){ super(name,classsum); } publicdoublepay(){ return1400+classsum*50; } publicStringtoString(){ return"姓名: "+this.name+"\t工资支出: "+this.pay()+"\n"; } } 将Person定义为接口,设计程序实现多态性。 package多态性; publicclassaa{ publicstaticvoidmain(Stringargs[]){ Personps[]=newPerson[4]; ps[0]=newAssistant("张三",120); ps[1]=newInstructor("赵二",130); ps[2]=newAssistantProfesson("李四",125); ps[3]=newProfessor("王五",134); Stringoutput=""; for(inti=0;i output+=ps[i].toString(); System.out.println(output); } } package多态性; interfacePerson{ publicabstractdoublepay(); } classAssistantimplementsPerson{ protectedStringname; protecteddoubleclasssum; publicAssistant(Stringname,doubleclasssum){ this.name=name; this.classsum=classsum; } publicdoublepay(){ return800+classsum*25; } publicStringtoString(){ return"姓名: "+this.name+"\t工资支出: "+this.pay()+"\n"; } } classInstructorimplementsPerson{ protectedStringname; protecteddoubleclasssum; publicInstructor(Stringname,doubleclasssum){ this.name=name; this.classsum=classsum; } publicdoublepay(){ return1000+classsum*35; } publicStringtoString(){ return"姓名: "+this.name+"\t工资支出: "+this.pay()+"\n"; } } classAssistantProfessonimplementsPerson{ protectedStringname; protecteddoubleclasssum; publicAssistantProfesson(Stringname,doubleclasssum){ this.name=name; this.classsum=classsum; } publicdoublepay(){ return1200+classsum*40; } publicStringtoString(){ return"姓名: "+this.name+"\t工资支出: "+this.pay()+"\n"; } } classProfessorimplementsPerson{ protectedStringname; protecteddoubleclasssum; publicProfessor(Stringname,doubleclasssum){ this.name=name; this.classsum=classsum; } publicdoublepay(){ return1400+classsum*50; } publicStringtoString(){ return"姓名: "+this.name+"\t工资支出: "+this.pay()+"\n"; } } (2): MyShape接口: package多态性1; importjava.awt.Graphics; publicinterfaceMyShape{ //intX1,Y1,X2,Y2; //methodtodrawtheshape /*Declareheaderformethoddraw*/ voiddraw(Graphicsg); //setandgetmethodsforeachofthefourprivatevariables voidsetX1(intx1); voidsetX2(intx2); voidsetY1(inty1); voidsetY2(inty2); intgetX1(); intgetX2(); intgetY1(); intgetY2(); }//endinterfaceMyShape MyLine.java: package多态性1; importjava.awt.Graphics; //MyLine.java //DeclarationofclassMyLine publicclassMyLineextendsObjectimplementsMyShape{ privateintX1,X2,Y1,Y2; publicMyLine(intx1,inty1,intx2,inty2){ //TODOAuto-generatedconstructorstub setX1(x1); setY1(y1); setX2(x2); setY2(y2); } @Override publicvoiddraw(Graphicsg){ //TODOAuto-generatedmethodstub g.drawLine(getX1(),getY1(),getX2(),getY2()); } @Override publicvoidsetX1(intx1){ //TODOAuto-generatedmethodstub X1=x1; } @Override publicvoidsetX2(intx2){ //TODOAuto-generatedmethodstub X2=x2; } @Override publicvoidsetY1(inty1){ //TODOAuto-generatedmethodstub Y1=y1; } @Override publicvoidsetY2(inty2){ //TODOAuto-generatedmethodstub Y2=y2; } @Override publicintgetX1(){ //TODOAuto-generatedmethodstub returnX1; } @Override publicintgetX2(){ //TODOAuto-generatedmethodstub returnX2; } @Override publicintgetY1(){ //TODOAuto-generatedmethodstub returnY1; } @Override publicintgetY2(){ //TODOAuto-generatedmethodstub returnY2; } }//endclassMyLine MyOval.java: package多态性1; importjava.awt.Graphics; importjava.awt.Graphics2D; importjava.awt.geom.Ellipse2D; importjava.awt.geom.Rectangle2D; publicclassMyOvalextendsObjectimplementsMyShape{ privateintleftX,topY,width,height; publicMyOval(intx1,inty1,intx2,inty2){ //TODOAuto-generatedconstructorstub setX1(x1); setY1(y1); setX2(x2); setY2(y2); } @Override publicvoiddraw(Graphicsg){ //TODOAuto-generatedmethodstub Graphics2Dg2=(Graphics2D)g; //画矩形 Rectangle2Drect=newRectangle2D.Double(leftX,topY,width,height); Ellipse2Dellipse=newEllipse2D.Double(); ellipse.setFrame(rect); g2.draw(ellipse); } @Override publicvoidsetX1(intx1){ //TODOAuto-generatedmethodstub leftX=x1; } @Override publicvoidsetX2(intx2){ //TODOAuto-generatedmethodstub width=x2; } @Override publicvoidsetY1(inty1){ //TODOAuto-generatedmethodstub topY=y1; } @Override publicvoidsetY2(inty2){ //TODOAuto-generatedmethodstub height=y2; } @Override publicintgetX1(){ //TODOAuto-generatedmethodstub returnleftX; } @Override publicintgetX2(){ //TODOAuto-generatedmethodstub returnwidth; } @Override publicintgetY1(){ //TODOAuto-generatedmethodstub returntopY; } @Override publicintgetY2(){ //TODOAuto-generatedmethodstub returnheight; } } MyRectangle.java: package多态性1; importjava.awt.Graphics; importjava.awt.Graphics2D; importjava.awt.geom.Ellipse2D; importjava.awt.geom.Rectangle2D; publicclassMyRectangleextendsObjectimplementsMyShape{ privateintleftX,topY,width,height; publicMyRectangle(intx1,inty1,intx2,inty2){ //TODOAuto-generatedconstructorstub setX1(x1); setY1(y1); setX2(x2); setY2(y2); } @Override publicvoiddraw(Graphicsg){ //TODOAuto-generatedmethodstub Graphics2Dg2=(Graphics2D)g; //画矩形 Rectangle2Drect=newRectangle2D.Double(leftX,topY,width,height); g2.draw(rect); } @Override publicvoidsetX1(intx1){ //TODOAuto-generatedmethodstub leftX=x1; } @Override publicvoidsetX2(intx2){ //TODOAuto-generatedmethodstub width=x2; } @Override publicvoidsetY1(inty1){ //TODOAuto-generatedmethodstub topY=y1; } @Override publicvoidsetY2(inty2){ //TODOAuto-generatedmethodstub height=y2; } @Override publicintgetX1(){ //TODOAuto-generatedmethodstub returnleftX; } @Override publicintgetX2(){ //TODOAuto-generatedmethodstub returnwidth; } @Override publicintgetY1(){ //TODOAuto-generatedmethodstub returntopY; } @Override publicintgetY2(){ //TODOAuto-generatedmethodstub returnheight; } } TestDrawWindow代码: package多态性1; //TestDrawWindow.java //Programrandomlydrawsshapes importjava.awt.*; importjavax.swing.*; publicclassTestDrawWindowextendsJFrame{ /** * */ privatestaticfinallongserialVersionUID=1L; privateMyShapeshape[]=newMyShape[15]; //Constructor publicTestDrawWindow() {super("Drawshapes"); intshapeType;//randomvaluetodetermineshapetocreateanddraw intx1,y1,x2,y2;//randomlychosencoordinatesforanewshape for(inti=0;i x1=(int)(Math.random()*400); x2=(int)(Math.random()*400); y1=(int)(Math.random()*400); y2=(int)(Math.random()*400); shapeType=(int)(Math.random()*3)+1; switch(shapeType){ case1: //line shape[i]=newMyLine(x1,y1,x2,y2); break; case2: //oval shape[i]=newMyOval(x1,y1,x2,y2); break; case3: //rectangle shape[i]=newMyRectangle(x1,y1,x2,y2); break; }//endswitch }//endfor }//endconstructor //drawshapes public
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多态性 GUI