实验项目二Java中的面向对象特性09newWord下载.docx
《实验项目二Java中的面向对象特性09newWord下载.docx》由会员分享,可在线阅读,更多相关《实验项目二Java中的面向对象特性09newWord下载.docx(19页珍藏版)》请在冰豆网上搜索。
inti,r;
Complex(intr,inti)
{
this.r=r;
this.i=i;
}
publicComplexcomplexAdd(Complexc)
{//对象作为参数,按引用传递
returnnewComplex(r+c.r,i+c.i);
//返回值应是该类的一个实例
}
publicStringtoString()
{
Stringres;
if(i==0)
res=r+"
"
;
else
if(i>
0)
res=r+"
+"
+i+"
i"
else
res=r+i+"
returnres;
}
}
classTest
publicstaticvoidmain(Stringargs[])
Complexc1=newComplex(1,2);
Complexc2=newComplex(2,3);
Complexc3=plexAdd(c2);
System.out.println(c3.toString()
);
}
运行结果:
任务2.设计一个分数类(Rational),要求分数包括分子和分母两个变量,提供能进行分数运算的方法。
然后编写一个测试类测试该类。
classRational
{
privateintnum,den;
publicRational(intn,intd){
num=n;
den=(d==0?
1:
d);
publicRational(){this(1,1);
publicRational(Rationalr){this(r.num,r.den);
privatevoidsimplify(Rationalr)
intg;
if(r.num!
=0)
{
g=getGCD(r.num,r.den);
r.num/=g;
r.den/=g;
//处理符号
if(r.den<
0){
r.den=-r.den;
r.num=-r.num;
privateintgetGCD(intm,intn){
intt,r;
if(m<
n){t=m;
m=n;
n=t;
r=m%n;
while(r!
=0){m=n;
n=r;
r=m%n;
returnn;
//定义找最小公倍数的方法
privateintgetLCM(intm,intn){
returnm*n/getGCD(m,n);
publicRationaladd(Rationalr){
Rationalr1=newRational();
//保存计算结果
//计算分母----找分母最小公倍数
r1.den=getLCM(r.den,den);
//计算分子
r1.num=r1.den/den*num;
r1.num+=r1.den/r.den*r.num;
//分子分母约分
simplify(r1);
returnr1;
publicRationalminus(Rationalr){
r1.num-=r1.den/r.den*r.num;
publicRationalmultiply(Rationalr){
r1.den=r.den*den;
r1.num=r.num*num;
simplify(r1);
publicRationaldivide(Rationalr){
r1.den=r.num*den;
r1.num=r.den*num;
publicStringtoString(){
Strings=newString("
if(num==0)
s="
0"
else
s=num+"
/"
+den;
returns;
publicclassTestRational{
publicstaticvoidmain(Stringargs[]){
Rationalr2=newRational(5,2);
Rationalr3=newRational(r2);
Rationalr4=newRational(-2,3);
Rationalr8=newRational(2,-3);
Rationalr5,r6,r7;
System.out.println(r1.toString());
System.out.println(r2.toString());
System.out.println(r3.toString());
System.out.println(r4.toString());
System.out.println(r8.toString());
r5=r1.add(r2);
r6=r1.minus(r3);
r7=r3.multiply(r4);
r8=r4.divide(r5);
System.out.println(r5.toString());
System.out.println(r6.toString());
System.out.println(r7.toString());
System.out.println(r8.toString());
任务3.设计一个表示二维平面上圆的类Circle,它继承自Point类。
Circle类包含表示圆半径的protected类型的成员变量r,以及获取和设置r值的方法:
getr(),setr(),计算圆面积的public方法getArea(),两个个判定方法的参数表示的某点是否在是否在圆内的方法isInCircle()。
此外,Circle类的构造方法要有多种。
classPoint{
privateintx,y;
publicPoint(intx,inty){this.x=x;
this.y=y;
publicPoint(){this(0,0);
publicPoint(Pointp){this(p.x,p.y);
publicintgetX(){returnx;
publicintgetY(){returny;
publicStringtoString(){
returnnewString("
("
+x+"
"
+y+"
)"
classCircleextendsPoint{
protecteddoubler;
publicCircle(){
this(0,0,1.0);
//或:
super();
r=1.0;
publicCircle(intx,inty,doubler){
super(x,y);
this.r=r;
publicCircle(Pointp,doubler){
this(p.getX(),p.getY(),r);
//或this(p.x,p.y,r);
publicvoidsetR(doubler){
this.r=(r>
=0)?
r:
0;
}//设置圆的半径
publicdoublegetR(){
returnr;
}
publicdoublegetArea(){
returnr*r*3.14159;
}//返回圆的面积
publicStringtoString(){
+getX()+"
+getY()+"
+"
r="
+r);
publicbooleanisInCircle(intx,inty){
if((x*x+y*y)<
r*r)
returntrue;
else
returnfalse;
publicbooleanisInCircle(Pointp){
if((p.getX()*p.getX()+p.getY()*p.getY())<
publicclassTestCircle{
publicstaticvoidmain(String[]args){
Circlecircle1=newCircle(20,30,40);
System.out.println(circle1.getArea());
System.out.println(circle1);
Circlecircle2=newCircle();
System.out.println(circle2.getArea());
System.out.println(circle2);
Pointp=newPoint(20,20);
Circlecircle3=newCircle(p,10);
System.out.println(circle3);
Pointp2=newPoint(11,12);
Circlecircle4=newCircle(20,30,20);
if(circle4.isInCircle(p2))
System.out.println("
在圆内"
不再圆内"
if(circle4.isInCircle(20,40))
(20,40)在圆内"
(20,40)不再圆内"
任务4.定义一个接口,声明一个方法计算长方形的面积,再定义一个具体的类实现这个接口,最后编写一个测试类使用这个接口。
importjavax.swing.JOptionPane;
interfaceShape{
publicabstractdoublearea();
classSquareimplementsShape{
protectedintxPosition,yPosition;
publicSquare(){xPosition=0;
yPosition=0;
publicSquare(intxP,intyP){
xPosition=xP;
yPosition=yP;
publicStringtoString(){
return"
+xPosition+"
"
+yPosition+"
publicdoublearea(){returnxPosition*yPosition;
classTestInterface{
publicstaticvoidmain(Stringargs[]){
Squaresquare1=newSquare(2,15);
Squaresquare2=newSquare(4,10);
Squaresquare3=newSquare(8,9);
ShapeShapes[]=newShape[3];
Shapes[0]=square1;
Shapes[1]=square2;
Shapes[2]=square3;
Stringoutput="
for(inti=0;
i<
Shapes.length;
i++){
output+="
\n"
+Shapes[i].toString()+"
\n面积="
+Shapes[i].area();
JOptionPane.showMessageDialog(null,output,"
Demo"
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
任务5.定义一个接口,定义有关算术的属性,并创建4个实现这个接口的类,分别进行加、减、乘、除的运算。
interfacecalculate{
publicabstractdoubleadd();
publicabstractdoubleminus();
publicabstractdoublemul();
publicabstractdoublediv();
classNumimplementscalculate{
publicNum(){xPosition=0;
publicNum(intxP,intyP){
publicdoubleadd(){returnxPosition+yPosition;
publicdoubleminus(){returnxPosition-yPosition;
publicdoublemul(){returnxPosition*yPosition;
publicdoublediv(){returnxPosition/yPosition;
classTestInterface2{
Numnum1=newNum(30,20);
Numnum2=newNum(24,4);
Numnum3=newNum(22,11);
calculatecalculates[]=newcalculate[3];
calculates[0]=num1;
calculates[1]=num2;
calculates[2]=num3;
calculates.length;
+calculates[i].toString()+"
\n相加得"
+calculates[i].add()+"
\n相减得"
+calculates[i].minus()+"
\n相乘得"
+calculates[i].mul()+"
\n相除得"
+calculates[i].div();
JOptionPane.showMessageDialog(null,output,"
任务6.定义一个包,包中包含一个求面积和长度的接口。
在其他文件中定义矩形类、三角形类和圆类分别实现这个接口求出各自的面积和长度。
importeva.Point;
classCircleextendsPoint{
privatedoubleradius=1.0;
publicdoublefindArea(){returnradius*radius*Math.PI;
publicdoublefindPerimeter(){return2*radius*Math.PI;
classRectangleextendsPoint{
privatedoublewidth=4.0;
privatedoubleheight=2.0;
publicdoublefindArea(){returnwidth*height;
publicdoublefindPerimeter(){return2*(width+height);
classTriangleextendsPoint{
privatedoublea=2.0;
privatedoubleb=3.0;
privatedoublec=4.0;
privatedoublep=(a+b+c)/2;
publicdoublefindArea(){returnMath.sqrt(p*(p-a)*(p-b)*(p-c));
publicdoublefindPerimeter(){returna+b+c;
publicclassTestAbstractClass{
publicstaticvoidtest(Pointg){
面积"
+g.findArea());
周长"
+g.findPerimeter());
Point[]g=newPoint[3];
g[0]=newCircle();
g[1]=newRectangle();
g[2]=newTriangle();
for(inti=0;
i<
3;
i++)test(g[i]);
packageeva;
interfaceGeometricObject{
publicabstractdoublefindArea();
publicabstractdoublefindPerimeter();
publicclassPointimplementsGeometricObject{
publicPoint(){xPosition=0;
p