java实验01.docx

上传人:b****6 文档编号:6358274 上传时间:2023-01-05 格式:DOCX 页数:22 大小:447.96KB
下载 相关 举报
java实验01.docx_第1页
第1页 / 共22页
java实验01.docx_第2页
第2页 / 共22页
java实验01.docx_第3页
第3页 / 共22页
java实验01.docx_第4页
第4页 / 共22页
java实验01.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

java实验01.docx

《java实验01.docx》由会员分享,可在线阅读,更多相关《java实验01.docx(22页珍藏版)》请在冰豆网上搜索。

java实验01.docx

java实验01

电子信息学院

实验报告书

 

课程名:

软件开发基础Java

(2)

题目:

实验01继承、接口与多态

实验类别:

【验证、调试、设计】

班级:

软件1412

学号:

141003330212

姓名:

张杨松

 

一、实验目的

(1)掌握类的继承机制。

(2)熟悉类中成员变量和方法的访问控制。

(3)熟悉方法或构造方法多态性。

(4)熟悉接口的定义方法。

二、实验内容

(1)定义一个球类Ball,包含一个私有成员变量——半径(doubler),两个公有成员方法:

设定半径方法(voidsetR(doublex))、得到半径值方法(doublegetR())。

定义一个台球类Billiards,继承Ball类,包含一个私有成员变量——颜色(Stringcolor),两个公有成员方法:

设定颜色方法setColor()、输出信息方法show(),其中show()方法可以输出该台球的颜色和半径值。

定义一个公有类TestBall,测试前两个类。

(2)编写程序实现如下功能:

已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(修改年龄、显示基本信息)及一个构造方法。

定义一组学生对象,并初始化他们的基本信息,然后依次输出。

(3)接口实验

程序文件TestInterface.java。

运行该程序,然后按【思考问题】内容修改和观察程序。

packagecn.edu.sdju.joshua;

interfaceShapeAreaPeri{

doublegetArea();

doublegetPerimeter();

}

classTriangleimplementsShapeAreaPeri{

inta,b,c;

Triangle(inta,intb,intc){

this.a=a;

this.b=b;

this.c=c;

}

publicdoublegetArea(){

doublerp=(a+b+c)/2.0;

returnMath.sqrt((rp-a)*(rp-b)*(rp-c));

}

publicdoublegetPerimeter(){

return(a+b+c);

}

}

classRectangleimplementsShapeAreaPeri{

intwidth,length;

Rectangle(intw,intl){

width=w;

length=l;

}

publicdoublegetArea(){

returnwidth*length;

}

publicdoublegetPerimeter(){

return(2*(width+length));

}

}

classCircleimplementsShapeAreaPeri{

intridus;

finaldoublepi=3.14;

Circle(intr){

ridus=r;

}

publicdoublegetArea(){

returnpi*ridus*ridus;

}

publicdoublegetPerimeter(){

return2*pi*ridus;

}

}

publicclassInterfaceDemo{

publicstaticvoidmain(Stringargs[]){

ShapeAreaPeri[]sap=newShapeAreaPeri[5];

sap[0]=newRectangle(3,7);

sap[1]=newRectangle(10,8);

sap[2]=newCircle(8);

sap[3]=newTriangle(4,4,4);

sap[4]=newCircle

(2);

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

System.out.println("当前形状面积="+sap[i].getArea());

System.out.println("当前形状周长="+sap[i].getPerimeter());

}

}

}

【思考问题】

在实现类Rectangle中注释掉一个方法后进行编译,看发生了什么?

为什么?

在实现类Rectangle中将各实现方法前的public修饰符去掉再进行编译,看发生了什么?

为什么?

将接口ShapeAreaPeri中定义的两个方法前加上abstract修饰符再编译,看对程序有影响否?

为什么?

不用单独的实现类Rectangle,直接在主类InterfaceDemo中实现那两个方法,如何修改程序?

将接口ShapeAreaPeri中定义的两个方法拆分定义成两个接口,即每个接口只定义一个方法,程序将如何修改?

(4)根据功能提示写程序:

设计一个实数类,一个复数类,都包含求模长(绝对值)、判断是否为0,求与它数和差积商的方法。

将全部类都定义在同一个.java文件中,部分代码已给出。

classRealNumber{

doublerealPart;

publicRealNumber(doublerealPart){

this.realPart=realPart;

}

publicRealNumber(){

this(0);

}

doublegetReal(){

returnrealPart;

}

publicdoublegetModulus(){//求模长,即绝对值

returnMath.abs(realPart);

}

publicbooleanisZero(){

//调用getModulus判断是不是0并返回结果

}

publicRealNumberAdd(RealNumbernum){

doublesumRealPart=this.realPart+num.getReal();//得到和的数值

RealNumbersum=newRealNumber(sumRealPart);//用和的数值构造实数类对象

returnsum;

}

//减法Subtract

//乘法Multiply

//除法Divide,除数为0(用isZero方法判断)时输出错误信息,返回用0构造的实数对象

}

classComplexNumber{//复数类继承实数类

//子类增加代表虚部的成员变量imaginaryPart

publicComplexNumber(doublerealPart,doubleimaginaryPart){//两个参数的构造方法

//子类构造方法第一条语句须调用父类构造方法

//给虚部赋值

}

//一个参数构造方法,将虚部当作0,调用两个参数的构造方法(两个参数的构造方法已包含对父类构造方法的调用,无需再调用)

//无参构造方法,将实部虚部都当作0,调用两个参数的构造方法(两个参数的构造方法已包含对父类构造方法的调用,无需再调用)

//getImaginary方法

//根据复数模长定义,重写父类求模长方法

//加法:

参数与返回值都是ComplexNumber类型

//减法:

参数与返回值都是ComplexNumber类型

//乘法:

参数与返回值都是ComplexNumber类型

//除法:

参数与返回值都是ComplexNumber类型,分母需要实数化,需用父类isZero判断除数是否为0,若为0返回用0构造的复数对象

}

publicclassDemo{

publicstaticvoidmain(Stringargs[]){

RealNumberr1=newRealNumber

(1);

RealNumberr2=newRealNumber

(2);

RealNumbersum=r1.Add(r2);//r1和r2的和

//输出r1和r2的和差积商,注意输出信息的可读性

//输出r1和0的和差积商(需要用0构造实数类对象),注意输出信息的可读性,

ComplexNumberc1=newComplexNumber(1,2);

ComplexNumberc2=newComplexNumber(3,4);

//输出c1和c2的和差积商,注意输出信息的可读性

//输出c1和0的和差积商(需要用0构造复数类对象),注意输出信息的可读性

}

}

三、实验结果(关键代码和运行结果)

/**

*测试台球类

*

*@paramargs

*/

publicclassTestBoll{

publicstaticvoidmain(String[]args){

Billiardsbilliards=newBilliards("紅色",10);

billiards.show();

System.out.println("-----------");

billiards.setR(20);

billiards.setColor("蓝色");

billiards.show();

}

}

classBoll{

privatedoubler;

publicBoll(doubler){

this.r=r;

}

publicdoublegetR(){

returnr;

}

publicvoidsetR(doubler){

this.r=r;

}

}

classBilliardsextendsBoll{

privateStringcolor;

publicBilliards(Stringcolor,doubler){

super(r);

this.color=color;

}

publicvoidsetColor(Stringcolor){

this.color=color;

}

/**

*显示台球的基本信息

*/

publicvoidshow(){

System.out.println("台球的顏色:

"+color+"\t半径:

"+getR());

}

}

图1-1运行结果

(2)/**

*

*创建学生类,并记录每个学生的信息

*

*@authorAdministrator

*

*/

publicclassPerson{

publicStringname;

publicStringsex;

publicintage;

publicPerson(Stringname,Stringsex,intage){

this.name=name;

this.sex=sex;

this.age=age;

}

}

classStudentextendsPerson{

publicStringStuNum;

publicStringclassNum;

publicvoidsetAge(intage){

this.age=age;

}

publicStudent(Stringname,Stringsex,intage,StringStuNum,

StringclassNum){

super(name,sex,age);

this.StuNum=StuNum;

this.classNum=classNum;

}

/**

*显示学生的基本信息的方法

*/

publicvoidshowInfo(){

System.out.println("姓名:

"+name+"性別:

"+sex+"年齡:

"+age+"学号:

"+StuNum+"班号:

"+classNum);

}

publicstaticvoidmain(String[]args){

Studentstudent[]=newStudent[3];

student[0]=newStudent("张杨松","男",20,"141003330212","12");

student[1]=newStudent("周梦帆","男",19,"141003330213","13");

student[2]=newStudent("陈思成","男",19,"141003330211","11");

/*

*采用for循环,遍历,然后分别打印出每个同学的信息

*/

for(Student_student:

student){

_student.showInfo();

}

}

}

(3)【思考问题】

在实现类Rectangle中注释掉一个方法后进行编译,看发生了什么?

为什么?

编译出错;

原因:

Rectangle实现了一个接口,就必须要实现接口中所有的抽象方法。

在实现类Rectangle中将各实现方法前的public修饰符去掉再进行编译,看发生了什么?

为什么?

编译出错;

原因:

在接口中,成员方法的默认属性为:

public、abstrack;实现接口中的方法时,必为:

public。

 

将接口ShapeAreaPeri中定义的两个方法前加上abstract修饰符再编译,看对程序有影响否?

为什么?

无影响;

原因:

接口中的成员方法的默认属性为:

public、abstrack;

不用单独的实现类Rectangle,直接在主类InterfaceDemo中实现那两个方法,如何修改程序?

interfaceShapeAreaPeri{

doublegetArea();

doublegetPerimeter();

}

classTriangleimplementsShapeAreaPeri{

inta,b,c;

Triangle(inta,intb,intc){

this.a=a;

this.b=b;

this.c=c;

}

publicdoublegetArea(){

doublerp=(a+b+c)/2.0;

returnMath.sqrt((rp-a)*(rp-b)*(rp-c));

}

publicdoublegetPerimeter(){

return(a+b+c);

}

}

classRectangle{

intwidth,length;

publicintgetWidth(){

returnwidth;

}

publicvoidsetWidth(intwidth){

this.width=width;

}

publicintgetLength(){

returnlength;

}

publicvoidsetLength(intlength){

this.length=length;

}

Rectangle(intw,intl){

width=w;

length=l;

}

publicdoublegetArea(){

return0;

}

publicdoublegetPerimeter(){

return0;

}

}

 

classCircleimplementsShapeAreaPeri{

intridus;

finaldoublepi=3.14;

Circle(intr){

ridus=r;

}

publicdoublegetArea(){

returnpi*ridus*ridus;

}

publicdoublegetPerimeter(){

return2*pi*ridus;

}

}

publicclassInterfaceDemoextendsRectangleimplementsShapeAreaPeri{

InterfaceDemo(intw,intl){

super(w,l);

}

publicdoublegetArea(){

returnlength*width;

}

publicdoublegetPerimeter(){

return2*(length+width);

}

publicstaticvoidmain(Stringargs[]){

ShapeAreaPeri[]sap=newShapeAreaPeri[3];

sap[0]=newCircle(8);

sap[1]=newTriangle(4,4,4);

sap[2]=newCircle

(2);

for(inti=0;i

System.out.println("当前形状面积="+sap[i].getArea());

System.out.println("当前形状周长="+sap[i].getPerimeter());

}

System.out.println("---------------");

Rectangler=newInterfaceDemo(10,15);

System.out.println("长方形的面积为:

"+r.getArea());

System.out.println("长方形的周长为:

"+r.getPerimeter());

}

}

将接口ShapeAreaPeri中定义的两个方法拆分定义成两个接口,即每个接口只定义一个方法,程序将如何修改?

interfaceGetArea{

doublegetArea();//获得面积、

}

interfaceGetPerimeter{

doublegetPerimeter();//获得周长

}

//三角形类

classTriangleimplementsGetArea,GetPerimeter{

inta,b,c;

Triangle(inta,intb,intc){

this.a=a;

this.b=b;

this.c=c;

}

publicdoublegetArea(){

doublerp=(a+b+c)/2.0;

returnMath.sqrt((rp-a)*(rp-b)*(rp-c));

}

publicdoublegetPerimeter(){

return(a+b+c);

}

}

//长方形类

classRectangleimplementsGetArea,GetPerimeter{

intwidth,length;

Rectangle(intw,intl){

width=w;

length=l;

}

publicdoublegetArea(){

returnwidth*length;

}

publicdoublegetPerimeter(){

return(2*(width+length));

}

}

 

classCircleimplementsGetArea,GetPerimeter{

intridus;

finaldoublepi=3.14;

Circle(intr){

ridus=r;

}

publicdoublegetArea(){

returnpi*ridus*ridus;

}

publicdoublegetPerimeter(){

return2*pi*ridus;

}

}

publicclassInterfaceDemo{

publicstaticvoidmain(Stringargs[]){

Rectangler=newRectangle(3,7);

Circlec=newCircle(8);

Trianglet=newTriangle(4,4,4);

System.out.println("长方形的面积="+r.getArea());

System.out.println("长方形的周长="+r.getPerimeter());

System.out.println("--------------");

System.out.println("圆的面积="+c.getArea());

System.out.println("圆的周长="+c.getPerimeter());

System.out.println("--------------");

System.out.println("三角形的面积="+t.getArea());

System.out.println("三角形的周长="+t.getPerimeter());

}

}

(4)

classRealNumber{

doublerealPart;

publicRealNumber(doublerealPart){

this.realPart=realPart;

}

publicRealNumber(){

this(0);

}

d

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

当前位置:首页 > 表格模板 > 合同协议

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

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