java类与继承复用验证.docx

上传人:b****8 文档编号:10944043 上传时间:2023-02-23 格式:DOCX 页数:17 大小:87.94KB
下载 相关 举报
java类与继承复用验证.docx_第1页
第1页 / 共17页
java类与继承复用验证.docx_第2页
第2页 / 共17页
java类与继承复用验证.docx_第3页
第3页 / 共17页
java类与继承复用验证.docx_第4页
第4页 / 共17页
java类与继承复用验证.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

java类与继承复用验证.docx

《java类与继承复用验证.docx》由会员分享,可在线阅读,更多相关《java类与继承复用验证.docx(17页珍藏版)》请在冰豆网上搜索。

java类与继承复用验证.docx

java类与继承复用验证

上机内容:

类与继承、复用、验证

学号:

班级:

姓名:

1.已实现的功能说明(UML图或文字)

1)设计并编写GeometricObject图形类

要求a)覆盖toString()输出图形的名称和数据成员值

b)覆盖equals()比较图形的面积

c)定义area()方法计算图形的面积

2)定义矩形、圆形、三角形类由GeometricObject派生

要求:

重写必要的方法

:

注意:

成员的访问权限

3)将这些类放入一个软件包中

4)编写图书类,在主类中计算并输出图书总价。

a)图书基本信息:

name,author,price,amount;

b)统计所有图书总价。

5)验证型上机实践

a)编写一段程序,测试String,StringDuffer,StringBuilder的创建,赋值,连接,替换,删除操作;

b)完成House类的clone改为深复制;

c)编写一段程序,自定义一维和二维数组测试数组常用方法。

2.主要源码(必要的注释)

1.图形

packagetestt;

publicabstractclassGeometricObject{

//定义数据类型的相关方法

publicStringtoString(){

return"name:

"+name+"\nradius="+radius+"\nlength="+length+"wide="+wide+"\nsideA="+sideA+"sideB="+sideB+"sideC="+sideC+"\nS="+area();

}

publicbooleanequals(GeometricObjectother){

if(this.area()==other.area())

returntrue;

else

returnfalse;

}

abstractdoublearea();

}

classRectangleextendsGeometricObject{

Stringname="矩形";

publicRectangle(doublel,doublew){

length=l;

wide=w;

}

doublearea(){

returnlength*wide;

}

publicvoiddisplay(){

System.out.println("name:

"+name+"\nlength="+length+"wide="+wide+"\nS="+area());

}

}

classCircleextendsGeometricObject{

Stringname="圆形";

publicCircle(doubler){

radius=r;

}

doublearea(){

return3.14*radius*radius;

}

publicvoiddisplay(){

System.out.println("name:

"+name+"\nradius="+radius+"\nS="+area());

}

}

classTriangleextendsGeometricObject{

//必要的get、set方法

doublearea(){

doublep=(sideA+sideB+sideC)/2.0;

returnMath.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));

}

publicvoiddisplay(){

System.out.println("name:

"+name+"\nradius="+radius+"\nS="+area());

}

}

packagetestt;

publicclasstesty{//测试

publicstaticvoidmain(String[]args){

Rectangley=newRectangle(3,4);

y.display();

Circleci=newCircle

(2);

ci.display();

TriangleT=newTriangle(2,2,2);

T.display();

System.out.println(ci.equals(T));

}

}

 

2.图书:

packagetestt;

importjava.util.Scanner;

publicclassBook

{

Scannerinput=newScanner(System.in);

//必要的数据类型定义

//以下为添加读者信息

doublezongjias=0;

publicvoidadd()

{

System.out.println("请输入要添加第"+(i+1)+"书籍的名字");

name[i]=input.next();

System.out.println("请输入要添加的第"+(i+1)+"书籍的作者");

author[i]=input.next();

System.out.println("请输入要添加第"+(i+1)+"书籍的价格");

price[i]=input.nextFloat();

System.out.println("请输入要添加第"+(i+1)+"的书籍的数量");

amount[i]=input.nextInt();

i++;

}

publicvoidss()

{

zong[0]=0;

for(intj=0;j

{

zong[j]=price[j]*amount[j];

System.out.println("第"+(j+1)+"本书籍的总价是"+zong[j]);

}

for(intp=0;p

{

zongjias=zong[p]+zongjias;

}

System.out.println("您所添加的书籍的总价是"+zongjias);

}

publicstaticvoidmain(String[]args)//主函数,用来测试

{

System.out.println("请选择您的操作:

\n1添加书籍\n2计算所添加书籍的总价格\n0退出系统");

Scannerinput=newScanner(System.in);

……

}

3.Buffer

packagetestt;

publicclassBuffer{

publicstaticvoidmain(String[]args){

try{

intcount=2;

testString(count);

testStringBuffer(count);

testStringBuilder(count);

}catch(Exceptione){

e.printStackTrace();

}

}

privatestaticStringtestString(intcount){//String

Stringresult="";

longbegin=System.currentTimeMillis();//开始时间

for(inti=0;i<1500;i++){

result+="hello";

}

longend=System.currentTimeMillis();//结束时间

longtime=end-begin;

System.out.println("String方法拼接"+1500+"次消耗时间:

"+time+"毫秒");

Stringresulta="Hello,";//创建及赋值A

Stringresultb="howareyou!

";//创建及赋值B

System.out.println("赋值a为:

"+resulta);

System.out.println("赋值b为:

"+resultb);

result=resulta+resultb;//连接

System.out.println("连接结果为:

"+result);

Stringreplace=resulta.replace("Hello","Hi");//string替换

result=replace+resultb;

System.out.println("替换结果为:

"+result);

Stringc=resultb.replace("areyou","");//删除

System.out.println("删除结果为:

"+c);

returnresult;

}

privatestaticStringtestStringBuffer(intcount){

StringBufferresult=newStringBuffer();

longbegin=System.currentTimeMillis();

for(inti=0;i<1500;i++){

result.append("hello");

}

longend=System.currentTimeMillis();

longtime=end-begin;

System.out.println("StringBuilder方法拼接"+1500+"次消耗时间:

"+time+"毫秒");

StringBufferresulta=newStringBuffer("Hello,");//创建及赋值A

StringBufferresultb=newStringBuffer("howareyou!

");//创建及赋值B

System.out.println("赋值a为:

"+resulta);

System.out.println("赋值b为:

"+resultb);

result=resulta.append(resultb);//连接

System.out.println("连接结果为:

"+result);

result=result.replace(6,18,"HOWAREYOU!

");//string替换

System.out.println("替换结果为:

"+result);

result=result.delete(6,18);//删除

System.out.println("删除结果为:

"+result);

returnresult.toString();

}

privatestaticStringtestStringBuilder(intcount){

StringBuilderresult=newStringBuilder();

longbegin=System.currentTimeMillis();

for(inti=0;i<1500;i++){

result.append("hello");

}

longend=System.currentTimeMillis();

longtime=end-begin;

System.out.println("StringBuffer方法拼接"+1500+"次消耗时间:

"+time+"毫秒");

StringBuilderresulta=newStringBuilder("Hello,");//创建及赋值A

StringBuilderresultb=newStringBuilder("howareyou!

");//创建及赋值B

System.out.println("赋值a为:

"+resulta);

System.out.println("赋值b为:

"+resultb);

result=resulta.append(resultb);//连接

System.out.println("连接结果为:

"+result);

result=result.replace(6,18,"HOWAREYOU!

");//string替换

System.out.println("替换结果为:

"+result);

result=result.delete(6,18);//删除

System.out.println("删除结果为:

"+result);

returnresult.toString();

}

}

4.深复制

packagetestt;

publicclassShenfuzhi{

publicstaticvoidmain(String[]args)

{

shallowcopya=newshallowcopy("tanghaolin","lll");

shallowcopycopy1=(shallowcopy)a.clone();

//改变属性值

System.out.println("浅复制前的对象普通数据类型成员值"+a.names+"浅复制前的引用类型成员值"+a.test1.name);

System.out.println("浅复制后的对象普通数据类型成员值"+copy1.names+"浅复制后的引用类型成员值"+copy1.test1.name);

a.test1.name="123";

//String是基本数据类型所以复制时只把值拷贝过去

//test1是引用类型中的对象所以复制时拷贝的是test1的地址

System.out.println("改变属性值后浅复制前的对象普通数据类型成员值"+a.names+"浅复制前的引用类型成员值"+a.test1.name);

System.out.println("改变属性值后浅复制后的对象普通数据类型成员值"+copy1.names+"浅复制后的引用类型成员值"+copy1.test1.name);

System.out.println("浅复制前的对象是否相等"+(a==copy1));

//==比较的是对象的地址通过地址来观察是否相等或者是否另外创建了新的对象

System.out.println("浅复制前后普通成员变量是否相等"+(a.names==copy1.names));

System.out.println("浅复制前后引用类型变量的是否相等"+(a.test1.name==copy1.test1.name));

deepcopyb=newdeepcopy("lll","tanghaolin");

deepcopycopy2=(deepcopy)b.clone();

System.out.println("深复制前的对象普通数据类型成员值"+b.name+"深复制前的引用类型成员值"+b.test2.name);

System.out.println("深复制后的对象普通数据类型成员值"+copy2.name+"深复制后的引用类型成员值"+copy2.test2.name);

//改变属性值

b.test2.name="789";

System.out.println("改变属性值后深复制前的对象普通数据类型成员值"+b.name+"深复制前的引用类型成员值"+b.test2.name);

System.out.println("改变属性值后浅复制后的对象普通数据类型成员值"+copy2.name+"浅复制后的引用类型成员值"+copy2.test2.name);

System.out.println("浅复制前的对象是否相等"+(b==copy2));

//==比较的是对象的地址通过地址来观察是否相等或者是否另外创建了新的对象

System.out.println("浅复制前后普通成员变量是否相等"+(b.name==copy2.name));

System.out.println("浅复制前后引用类型变量的是否相等"+(b.test2.name==copy2.test2.name));

}

}

classshallowcopyimplementsCloneable

{

testtest1;

Stringnames;

publicshallowcopy(Stringnames,Stringobj)

{

this.names=names;

test1=newtest(obj);

}

//proteced属性

publicObjectclone()

{

try

{

//浅赋值直接调用父类的赋值函数

returnsuper.clone();

}

catch(CloneNotSupportedExceptione)//抛出异常

{

returnnull;

}

}

}

classdeepcopyimplementsCloneable

{

testtest2;

Stringname;

publicdeepcopy(Stringname,Stringobj)

{

//this.test2=o;

test2=newtest(obj);

this.name=name;

}

publicObjectclone()

{

deepcopys=newdeepcopy(name,test2.name);

returns;

}

}

classtest

{

Stringname;

inti;

publictest(Stringname)

{

this.name=name;

//this.i=i;

}

}

5.数组

packagetestt;

importjava.util.Arrays;

publicclassShuzu{

publicstaticvoidmain(String[]args){

//一位数组和二维数组的常用方法

System.out.println("一维数组部分方法测试");

int[]p={1,11,6,8,4,66,12};

//数组赋值函数

int[]s=newint[10];

s=Arrays.copyOf(p,p.length);

System.out.println("数组赋值(s是复制而来)");

//Duplicate重复

for(intt=0;t

{

System.out.print(s[t]+"");

}

//排序函数

System.out.println("");

Arrays.sort(p);

System.out.println("数组排序函数(重排结果如下)");

for(intw=0;w

{

System.out.print(p[w]+"");

}

System.out.println("");

System.out.println("二维数组部分函数测试");

int[][]r={{2,2,3},{6,5,6},{6,5,6}};

for(intv=0;v

{

for(intu=0;u

System.out.print(r[v][u]+"");

System.out.println();

}

}

}

3.开发中遇到的问题与解决方法

1)类与类之间的关系模糊,致使在编程中期目标不明确

编程第一步应先进行总体规划,画出类图,明确类间层次关系

2)重写toString(),equals方法。

4.目前存在的问题与改进方案

equals方法简单实现。

可以进一步添加图形数据验证方法,例如:

三角形任意两边大于第三边,半径大于0等。

5.运行效果图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1