继承与多态.docx
- 文档编号:29332424
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:19
- 大小:206KB
继承与多态.docx
《继承与多态.docx》由会员分享,可在线阅读,更多相关《继承与多态.docx(19页珍藏版)》请在冰豆网上搜索。
继承与多态
山西大学计算机与信息技术学院
实验报告
姓名
学号
专业班级
课程名称
Java实验
实验日期
成绩
指导教师
批改日期
实验名称
实验6继承与多态
一.实验目的:
(1)掌握常用Java继承与多态的特征和使用方式
(2)掌握抽象类与接口的定义与使用方式;
二.实验内容
1.(复数Complex类)一个复数是一个形式为a+bi的数,这里的a和b都是实数,i是-1的平方根。
数字a和b分别称为复数的实部和虚部。
设计一个名为Complex的复数类,要求完成复数运算的加法(add)、减法(substract)、乘法(multiply)和求绝对值abs方法,并且覆盖toString方法以返回一个表示复数的字符串。
方法toString返回字符串a+bi。
如果b是0,那么它只返回a。
提供三个构造方法Complex(a,b)、Complex(a)和Complex()。
Complex()创建实部和虚部都为0的复数,而Complex(a)表示创建虚部为0的Complex对象。
还提供getRealPart()和getImaginaryPart()方法以分别返回复数的实部和虚部。
编写一个测试程序,提示用户输入两个复数,然后显示它们做加、减、乘、求绝对值之后的结果。
提示:
两个复数相乘的公式为:
(a+bi)*(c+di)=(ac-bd)+(bc+ad)i
求绝对值:
|a+bi|=Math.sqrt(a*a+b*b)
程序源代码
importjava.util.Scanner;
publicclassno1{
publicstaticvoidmain(String[]args){
System.out.println("请输个组成a复数的a和b,中间以空格隔开:
");
Scannerinput=newScanner(System.in);
inta[]=newint[2];
for(inti=0;i a[i]=input.nextInt(); } Complexv=newComplex(a[0],a[1]); System.out.println("请输个组成b复数的a和b,中间以空格隔开: "); intb[]=newint[2]; for(inti=0;i b[i]=input.nextInt(); } Complexf=newComplex(b[0],b[1]); System.out.println("复数a和复数b相加为: "+Complex.Addition(v,f)); System.out.println("复数a和复数b相减为: "+Complex.Subtraction(v,f)); System.out.println("复数a和复数b相乘为: "+Complex.Multiliptional(v,f)); System.out.println("复数a的绝对值为: "+v.Abs(v)); System.out.println("复数b的绝对值为: "+f.Abs(f)); } } classComplex{ inta; intb; publicComplex(inta,intb){ this.a=a; this.b=b;} publicstaticStringtoString(Complexe){ intc=e.a; intd=e.b; if(d==0){ returnString.valueOf(c); } elseif(d>0){ returnString.valueOf(c)+"+"+String.valueOf(d)+"i"; } else{ returnString.valueOf(c)+String.valueOf(d)+"i"; } } publicstaticStringAddition(Complexa,Complexb){ Complexc=newComplex(0,0); c.a=a.a+b.a; c.b=a.b+b.b; returnc.toString(c); } publicstaticStringMultiliptional(Complexa,Complexb){ Complexc=newComplex(0,0); c.a=a.a*b.a-a.b*b.b; c.b=a.b*b.a+a.a*b.b; returnc.toString(c); } publicstaticStringSubtraction(Complexa,Complexb){ Complexc=newComplex(0,0); c.a=a.a-b.a; c.b=a.b-b.b; returnc.toString(c); } publicdoubleAbs(Complexa){ doublec=(double)Math.sqrt(a.a*a.a+a.b*a.b); returnc; } } 程序运行结果贴图: 如下 2.定义一个形状Shape抽象类,该类具有颜色color、创建日期dateCreated两个私有属性。 其中dateCreated为创建该形状对象的系统时间。 要求: (1)定义color的get和set方法 (2)dateCreated的get方法 (3)定义抽象方法getArea()和抽象方法getPerimeter(),分别表示求形状的面积和周长。 (4)无参数构造方法,方法中将dateCreated属性赋值为当前系统时间。 (5)带参数构造方法Shape(Stringcolor)类,该方法中将dateCreated属性赋值为当前系统时间,并将color成员属性的值设置为参数color的值。 (6)定义Shape类的toString方法,实现显示该形状的颜色和创建日期。 程序源代码: packageanita; importjava.util.Calendar; publicclassShape{ publicstaticvoidmain(String[]args){ } } abstractclassshape1{ privateStringcolor=""; privateStringdatecreated=shape1.Datecreated(); publicStringgetColor(){ returncolor; } publicvoidsetColor(Stringcolor){ this.color=color; } publicshape1(){ } publicshape1(Stringcolor){ this.color=color; } privatestaticStringDatecreated(){ Calendarcalendar=Calendar.getInstance(); intyear=calendar.get(Calendar.YEAR); intmonth=calendar.get(Calendar.MONTH)+1; intdate=calendar.get(Calendar.DATE); inthour=calendar.get(Calendar.HOUR); intminute=calendar.get(Calendar.MINUTE); intsecond=calendar.get(Calendar.SECOND); Stringb=String.valueOf(year)+"年"+String.valueOf(month)+"月"+String.valueOf(date)+"日"+String.valueOf(hour)+"时"+String.valueOf(minute)+"分"+String.valueOf(second)+"秒"; returnb; } publicStringgetdatecreated(){ returndatecreated; } publicStringtoString(){ Stringf; f="该形状颜色为: "+color+"创建日期为: "+datecreated; returnf; } abstractvoidgetArea(); abstractvoidgetPerimeter(); } 3.定义圆Circle类、矩形Rectangle类继承题2中的Shape类。 重写父类的toString()方法。 程序: packageanita; importjava.util.Calendar; publicclassShape{ publicstaticvoidmain(String[]args){ Circlef=newCircle(5); System.out.println(f.toString()); Rectangler=newRectangle(7,5); System.out.println(r.toString()); } } abstractclassshape1{ protectedStringcolor="transparency"; protectedStringdatecreated=shape1.Datecreated(); publicStringgetColor(){ returncolor; } publicvoidsetColor(Stringcolor){ this.color=color; } publicshape1(){ } publicshape1(Stringcolor){ this.color=color; } privatestaticStringDatecreated(){ Calendarcalendar=Calendar.getInstance(); intyear=calendar.get(Calendar.YEAR); intmonth=calendar.get(Calendar.MONTH)+1; intdate=calendar.get(Calendar.DATE); inthour=calendar.get(Calendar.HOUR); intminute=calendar.get(Calendar.MINUTE); intsecond=calendar.get(Calendar.SECOND); Stringb=String.valueOf(year)+"年"+String.valueOf(month)+"月"+String.valueOf(date)+"日"+String.valueOf(hour)+"时"+String.valueOf(minute)+"分"+String.valueOf(second)+"秒"; returnb; } publicStringgetdatecreated(){ returndatecreated; } publicStringtoString(){ Stringf; f="该形状颜色为: "+color+"创建日期为: "+datecreated; returnf; } abstractdoublegetArea(); abstractdoublegetPerimeter(); } classCircleextendsshape1{ privateintr=0; Circle(){} Circle(inta){ r=a; } Circle(Stringc){ color=c; } Circle(inta,Stringc){ r=a; color=c; } doublegetArea(){ returnMath.PI*getR()*getR(); } doublegetPerimeter(){ returnMath.PI*2*getR(); } publicintgetR(){ returnr; } publicvoidsetR(intr){ this.r=r; } publicStringtoString(){ Stringf; f="这个圆形半径: "+r+"面积: "+getArea()+"周长: "+getPerimeter()+"\n该形状颜色为: "+color+"创建日期为: "+datecreated; returnf; } } classRectangleextendsshape1{ privateintwidth=0; privateintlength=0; publicintgetWidth(){ returnwidth; } publicvoidsetWidth(intr){ width=r; } publicintgetLength(){ returnlength; } publicvoidsetLength(intr){ length=r; } Rectangle(intw,intl){ width=w; length=l; } Rectangle(){} Rectangle(intw,intl,Stringc){ width=w; length=l; color=c; } Rectangle(Stringc){ color=c; } doublegetArea(){ returnwidth*length; } doublegetPerimeter(){ return2*(width+length); } publicStringtoString(){ Stringf; f="这个矩形宽: "+width+"长: "+length+"周长: "+getPerimeter()+"面积: "+getArea()+"\n该形状颜色为: "+color+"创建日期为: "+datecreated; returnf; } } 程序运行结果贴图 4.将2题中的Shape类改为接口,接口中只包括三个方法getArea()、方法getPerimeter()和toString()方法。 重新定义题3中的圆Circle类、矩形Rectangle类,要求这两个类实现Shape接口。 可灵活改动上面的要求。 程序: packageanita; importjava.util.Calendar; publicclassShape{ publicstaticvoidmain(String[]args){ Circlef=newCircle(5); System.out.println(f.toString()); Rectangler=newRectangle(7,5); System.out.println(r.toString()); } } interfaceshape1{ StringtoString(); doublegetArea(); doublegetPerimeter(); } classCircleimplementsshape1{ privateintr=0; Circle(){} Circle(inta){ r=a; } publicdoublegetArea(){ returnMath.PI*getR()*getR(); } publicdoublegetPerimeter(){ returnMath.PI*2*getR(); } publicintgetR(){ returnr; } publicvoidsetR(intr){ this.r=r; } publicStringtoString(){ Stringf; f="这个圆形半径: "+r+"面积: "+getArea()+"周长: "+getPerimeter(); returnf; } } classRectangleimplementsshape1{ privateintwidth=0; privateintlength=0; publicintgetWidth(){ returnwidth; } publicvoidsetWidth(intr){ width=r; } publicintgetLength(){ returnlength; } publicvoidsetLength(intr){ length=r; } Rectangle(intw,intl){ width=w; length=l; } publicdoublegetArea(){ returnwidth*length; } publicdoublegetPerimeter(){ return2*(width+length); } publicStringtoString(){ Stringf; f="这个矩形宽: "+width+"长: "+length+"周长: "+getPerimeter()+"面积: "+getArea(); returnf; } 程序运行结果贴图 5.编写一个方法,求数组中所有形状Shape对象的面积之和,方法签名如下: publicstaticdoublesumArea(Shape[]a) packageanita; importjava.util.Calendar; publicclassShape{ publicstaticvoidmain(String[]args){ Circlef=newCircle(5); System.out.println(f.toString()); Rectangler=newRectangle(7,5); System.out.println(r.toString()); shape1[]a=newshape1[2]; a[0]=f; a[1]=r; System.out.println("所有图形的面积之和为: "+shape1.sumArea(a)); } } abstractclassshape1{ protectedStringcolor="transparency"; protectedStringdatecreated=shape1.Datecreated(); publicStringgetColor(){ returncolor; } publicvoidsetColor(Stringcolor){ this.color=color; } publicshape1(){ } publicshape1(Stringcolor){ this.color=color; } privatestaticStringDatecreated(){ Calendarcalendar=Calendar.getInstance(); intyear=calendar.get(Calendar.YEAR); intmonth=calendar.get(Calendar.MONTH)+1; intdate=calendar.get(Calendar.DATE); inthour=calendar.get(Calendar.HOUR); intminute=calendar.get(Calendar.MINUTE); intsecond=calendar.get(Calendar.SECOND); Stringb=String.valueOf(year)+"年"+String.valueOf(month)+"月"+String.valueOf(date)+"日"+String.valueOf(hour)+"时"+String.valueOf(minute)+"分"+String.valueOf(second)+"秒"; returnb; } publicStringgetdatecreated(){ returndatecreated; } publicStringtoString(){ Stringf; f="该形状颜色为: "+color+"创建日期为: "+datecreated; returnf; } publicdoublegetArea1(){ returnarea; } abstractdoublegetArea(); abstractdoublegetPerimeter(); protecteddoublearea; publicstaticdoublesumArea(shape1[]a){ doublesum=0; for
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承