您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 实验5--抽象类和接口
南昌大学实验报告学生姓名:王维学号:6100212202专业班级:网工121班实验类型:■验证□综合□设计□创新实验日期:实验成绩:实验5抽象类和接口一、实验目的1、掌握抽象类abstract的概念。2、掌握接口interface的概念。3、掌握抽象类、接口的定义、实现与使用;4、理解接口和继承的混合使用二、实验内容1、课本p39914.3题和14.7题2、将课本中的GeometricObject类改为接口,重新设计circle、rectangle类,实现相应的功能。三、实验要求1、通过上述程序的设计,清楚java中抽象类、接口的定义、实现与使用;四、实验环境1、PC微机;2、DOS操作系统或Windows操作系统;3、Sdk程序集成环境或Eclipse程序集成环境。五、实验步骤1、输入源程序;2、利用相关工具(Eclipse运行本程序);3、查看实验结果,通过分析结果来掌握继承和多态的特征。六、测试数据略七、源代码14.3题:Square类:publicclassSquareextendsGeometricObjectimplementsColorable{privatedoublelength;publicSquare(doublelength){super();this.length=length;}publicSquare(doublelength,Stringcolor){super(color,true);this.length=length;}publicvoidhowToColor(){//TODOAuto-generatedmethodstubSystem.out.println(Colorallfoursides);}publicvoidxx(){}@OverridepublicdoublegetArea(){//TODOAuto-generatedmethodstubreturnlength*length;}@OverridepublicdoublegetPerimeter(){//TODOAuto-generatedmethodstubreturn4*length;}}Square测试类:publicclassTestSquare{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubGeometricObjectobjects[]=newGeometricObject[5];objects[0]=newSquare(1);objects[1]=newSquare(1.5,red);objects[2]=newSquare(2.5);objects[3]=newSquare(3.0,black);objects[4]=newSquare(5);for(inti=0;i5;i++){System.out.println(第+i+对象:);if(objects[i].isFilled()){((Colorable)objects[i]).howToColor();}elseSystem.out.println(不可着色);System.out.println(面积为:+objects[i].getArea());System.out.println(周长为:+objects[i].getPerimeter());}}}14.7题Octagon类publicclassOctagonextendsGeometricObjectimplementsComparableOctagon,Cloneable{privatedoublelength;publicOctagon(doublelength){this.length=length;}@OverridepublicdoublegetArea(){return(2+4/Math.sqrt(2))*length*length;}@OverridepublicdoublegetPerimeter(){return0;}publicdoublegetLength(){returnlength;}publicvoidsetLength(doublelength){this.length=length;}publicintcompareTo(Octagono){if(this.lengtho.getLength())return1;elseif(this.lengtho.getLength())return-1;elsereturn1;}@OverrideprotectedObjectclone()throwsCloneNotSupportedException{returnsuper.clone();}}Octagon测试类:publicclassTestOctagon{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubOctagono=newOctagon(5);System.out.println(面积为:+o.getArea());System.out.println(周长为:+o.getPerimeter());}}接口GeometricObjectimportjava.util.Date;publicinterfaceGeometricObject{publicStringgetColor();publicvoidsetColor(Stringcolor);publicbooleanisFilled();publicvoidsetFilled(booleanfilled);publicDategetDateCreated();publicStringtoString();publicabstractdoublegetArea();publicabstractdoublegetPerimeter();}新的Circle类:importjava.util.Date;publicclassCircleimplementsGeometricObject{privateStringcolor=white;privatebooleanfilled;privatejava.util.DatedateCreated;privatedoubleradius;publicCircle(){dateCreated=newjava.util.Date();}publicCircle(doubleradius){}publicStringgetColor(){//TODOAuto-generatedmethodstubreturncolor;}publicvoidsetColor(Stringcolor){//TODOAuto-generatedmethodstubthis.color=color;}publicbooleanisFilled(){//TODOAuto-generatedmethodstubreturnfilled;}publicvoidsetFilled(booleanfilled){//TODOAuto-generatedmethodstubthis.filled=filled;}publicDategetDateCreated(){//TODOAuto-generatedmethodstubreturndateCreated;}publicdoublegetArea(){//TODOAuto-generatedmethodstubreturnradius*radius*Math.PI;}publicdoublegetPerimeter(){//TODOAuto-generatedmethodstubreturn2*radius*Math.PI;}publicdoublegetRadius(){returnradius;}publicvoidsetRadius(doubleradius){this.radius=radius;}}新的Rectangle类:importjava.util.Date;publicclassRectangleimplementsGeometricObject{privateStringcolor=white;privatebooleanfilled;privatejava.util.DatedateCreated;privatedoublewidth;privatedoubleheight;publicRectangle(){dateCreated=newjava.util.Date();}publicRectangle(doublewidth,doubleheight){this.width=width;this.height=height;}publicStringgetColor(){//TODOAuto-generatedmethodstubreturncolor;}publicvoidsetColor(Stringcolor){//TODOAuto-generatedmethodstubthis.color=color;}publicbooleanisFilled(){//TODOAuto-generatedmethodstubreturnfilled;}publicvoidsetFilled(booleanfilled){//TODOAuto-generatedmethodstubthis.filled=filled;}publicDategetDateCreated(){//TODOAuto-generatedmethodstubreturndateCreated;}publicdoublegetArea(){//TODOAuto-generatedmethodstubreturnwidth*height;}publicdoublegetPerimeter(){//TODOAuto-generatedmethodstubreturn2*(width+height);}publicdoublegetWidth(){returnwidth;}publicvoidsetWidth(doublewidth){this.width=width;}publicdoublegetHeight(){returnheight;}publicvoidsetHeight(doubleheight){this.height=height;}}八、思考题1、分析Java中抽象类、接口异同点?相同点,都是对于类的一种抽象,不过接口的抽象程度更高。两者都含有未实现的方法,但是接口中的所有方法必须是公共的抽象实例方法,而抽象类无限制。两者都不能用new实例化,但是抽象类可以有构造方法,而接口不能有构造方法。抽象类的变量无限制,而接口所有变量必须是publicstaticfinal。
本文标题:实验5--抽象类和接口
链接地址:https://www.777doc.com/doc-7367343 .html