Java实验5.docx
- 文档编号:17762346
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:16
- 大小:144.55KB
Java实验5.docx
《Java实验5.docx》由会员分享,可在线阅读,更多相关《Java实验5.docx(16页珍藏版)》请在冰点文库上搜索。
Java实验5
12计算机本科《面向对象程序设计(JAVA)》实验报告
班级:
12计本3班姓名:
王海燕日期:
2014.4.14
实验五实验名称:
抽象类与接口
1.实验目的
(1)掌握类的继承关系和派生方法。
(2)掌握多态的概念和使用。
(3)掌握接口的定义与使用。
(4)掌握包的概念与使用
2.实验任务
第一部分:
练习返回值与形参为为引用类型的方法的定义
教材144页5-12、5-13。
第二部分:
做在线测试---章节测试--类的题目,直接提交,把提交的结果页面截图黏贴到报告中。
注:
测试成绩不计入期末评定成绩。
第三部分:
(1)为实验四中定义的矩形类派生一个子类:
长方体类。
若长方体类的操作是求周长、面积和体积,则这个子类除了从父类那里继承的方法之外,还需要哪些方法?
列出长方体类的所有域和方法。
编程检查、运行所编写长方体类。
(2)编写Applet程序测试以上类与子类。
第四部分:
(3)定义接口Figure,其继承关系如下图。
增加一个PrintItMyWay()抽象方法,方法没有形参,返回值为String。
将公共部分抽象出来定义到接口中?
答案
(4)改写矩形类,使之实现Figure接口,用PrintItMyWay()方法将矩形的相关信息(长、宽、周长、面积)返回为字符串形式。
答案
(5)改写长方体类,覆盖printItMyWay()方法,将长方体边长、周长、面积、体积信息形成字符串信息返回。
(6)在Figure接口上增加一个新的printItMyWay(Graphics2Dg)方法,这个方法给定一个图形对象形参,返回值为空。
其功能是利用Graphics2D类打印对应的图形形状。
保持矩形不变,编译运行,有什么结果?
为什么?
在矩形中实现新定义的printItMyWay(Graphics2Dg)方法,调用Graphics2D中相应方法打印矩形,保持长方体不变,编译运行,有什么结果?
为什么?
在长方体中实现printItMyWay(Graphics2Dg)。
调用Graphics2D中相应方法打印长方体图形。
(7)编写Applet类测试,创建矩形和长方体对象,在paint方法中利用传递过来的Graphics对象g获取Graphics2Dg2d;
publicvoidpaintComponent(Graphicsg){
Graphics2Dg2=(Graphics2D)g;
……
},实现各自信息输出以及图形绘制。
(8)将矩形和长方体组织成一个包MyFigure。
修正程序。
(9)编写Applet程序测试以上类与子类,输出信息,打印图形。
3.实验步骤:
第一部分:
classComplexNumber
{
doublem_dRealPart;
doublem_dImaginPart;
ComplexNumber()
{
m_dRealPart=0;
m_dImaginPart=0;
}
ComplexNumber(doubler,doublei)
{
m_dRealPart=r;
m_dImaginPart=i;
}
doublegetRealPart()
{
returnm_dRealPart;
}
doublegetImaginaryPart()
{
returnm_dImaginPart;
}
voidsetRealPart(doubled)
{
m_dRealPart=d;
}
voidsetImaginaryPart(doubled)
{
m_dImaginPart=d;
}
ComplexNubercomplexAdd(ComplexNuberc)
{
c.m_dRealPart+=m_dRealPart;
c.m_dImaginPart+=m_dImaginPart;
returnc;
}
ComplexNubercomplexAdd(doublec)
{
m_dRealPart+=c;
returnthis;
}
ComplexNubercomplexMinus(ComplexNuberc)
{
c.m_dRealPart-=m_dRealPart;
c.m_dImaginPart-=m_dImaginPart;
returnc;
}
ComplexNubercomplexMinus(doublec)
{
m_dRealPart-=c;
returnthis;
}
ComplexNubercomplexMulti(ComplexNuberc)
{
c.m_dRealPart=c.m_dRealPart*this.m_dRealPart-c.m_dImaginPart*this.m_dImaginPart;
c.m_dImaginPart=this.m_dImaginPart*c.m_dRealPart+this.m_dRealPart*c.m_dImaginPart;
returnc;
}
ComplexNubercomplexMulti(doublec)
{
m_dRealPart=c.m_dRealPart*this.m_dRealPart;
m_dImaginPart=this.m_dRealPart*c.m_dImaginPart;
returnthis;
}
voidtoString()
{
return(m_dRealPart+”+”+m_dImaginPart+”i”);
}
}
第二部分:
第三部分:
第三部分:
源代码:
packagezhang;
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
//主类。
Applet程序。
测试矩形类和其长方体子类。
publicclasssquare1extendsAppletimplementsActionListener{
Labelprompt1,prompt2,prompt3,prompt4;
TextFieldinput1,input2,input3;
//窗框组成各部分初始化。
publicvoidinit(){
prompt1=newLabel("Pleaseenterthelenght,width,heightofthecubiod.");
input1=newTextField(5);
input2=newTextField(5);
input3=newTextField(5);
prompt2=newLabel("");//就算标签没内容,也要初始化。
一开始以为不需要写。
记一笔。
prompt3=newLabel("");
prompt4=newLabel("");
add(prompt1);
add(input1);
add(input2);
add(input3);
add(prompt2);
add(prompt3);
add(prompt4);
input1.addActionListener(this);
input2.addActionListener(this);
input3.addActionListener(this);
}
//执行Applet程序的各个功能。
publicvoidactionPerformed(ActionEvente){
doublelength,width,height,per,area,vol;
//字符串类型转换为浮点类型。
从输入框中分别得到长度、宽度和高度的值。
length=Double.parseDouble(input1.getText());
width=Double.parseDouble(input2.getText());
height=Double.parseDouble(input3.getText());
//构造函数声明一个长方体类的对象。
Cuboidtest=newCuboid(length,width,height);
//调用长方体类中的方法,分别求长方体的周长、面积和体积。
per=test.CouPer(length,width);//继承的父类的求周长的方法。
求的是长方体的底面周长。
area=test.CouArea(length,width);//继承的父类的求面积的方法。
求的是长方体的底面面积。
vol=test.CouVol(length,width,height);
//以下为计算结果在窗框中输出。
prompt2.setText("Theperimeterofthecuboidis"+String.valueOf(per));
prompt3.setText("Theareaofthecuboidis"+String.valueOf(area));
prompt4.setText("Thevolumeofthecuboidis"+String.valueOf(vol));
}
}
//矩形类。
classRec{
doublelength;
doublewidth;
//无参数构造函数。
Rec(){
length=0.0;
width=0.0;
}
//带参数构造函数。
Rec(doublex,doubley){
length=x;
width=y;
}
//计算矩形周长的方法。
doubleCouPer(doublelength,doublewidth){
doubleper;
per=2*(length+width);
returnper;
}
//计算矩形面积的方法。
doubleCouArea(doublelength,doublewidth){
doublearea;
area=length*width;
returnarea;
}
}
//长方体类。
继承了矩形类。
classCuboidextendsRec{
//长方体的域。
分别为长、宽和高。
doublelength,width,height;
//无参数构造方法。
Cuboid(){
length=width=height=0.0;
}
//带参数构造方法。
Cuboid(doublelength1,doublewidth1,doubleheight1){
length=length1;
width=width1;
height=height1;
}
//计算长方体体积的方法。
doubleCouVol(doublelength,doublewidth,doubleheight){
doublevol;
vol=length*width*height;
returnvol;
}
}
运行界面:
第四部分:
源代码:
packagetest;
importjava.applet.Applet;
importjava.awt.*;
interfaceFigure{
publicabstractStringPrintItMyWay();
publicabstractvoidprintItMyWay(Graphics2Dg);
}
publicclassYunextendsApplet{
Rectangler1=newRectangle(200,100);
Rectangularr2=newRectangular(150,100,70);
Circlec1=newCircle(500,50,100);
Clinderc2=newClinder(650,40,50,100);
publicvoidpaint(Graphicsg){
Graphics2Dg2d=(Graphics2D)g;
g2d.setColor(Color.BLUE);
r1.printItMyWay(g2d);//绘画矩形
r2.printItMyWay(g2d);//绘画长方体
c1.printItMyWay(g2d);//绘画圆
c2.printItMyWay(g2d);//绘画圆柱
g.setColor(Color.black);
g.drawString(r1.PrintItMyWay(),50,200);//输出各图形的信息
g.drawString(r2.PrintItMyWay(),50,230);
g.drawString(c1.PrintItMyWay(),50,260);
g.drawString(c2.PrintItMyWay(),50,290);
}
}
classRectangleimplementsFigure{
intlength,width;
Rectangle(){
length=1;
width=1;
}
Rectangle(inta,intb){
length=a;
width=b;
}
publicintgetGrith(){
return2*(length+width);
}
publicintgetArea(){
returnlength*width;
}
publicStringPrintItMyWay(){
return"矩形的长为:
"+length+"宽为:
"+width+"周长为:
"+getGrith()+"面积为:
"+getArea();
}
publicvoidprintItMyWay(Graphics2Dg){
g.drawRect(30,40,length,width);
}
}
classRectangularextendsRectangle{
intheight;
Rectangular(){
super();
height=1;
}
Rectangular(inta,intb,intc){
super(a,b);
height=c;
}
publicintgetL(){
return4*(length+width+height);
}
publicintgetS(){
returnlength*width+length*height+width*height;
}
publicintgetV(){
returnlength*width*height;
}
publicStringPrintItMyWay(){
return"长方体的长为:
"+length+"宽为:
"+width+"高为"+height+"周长为:
"+getL()+"面积为:
"+getS()+"体积为:
"+getV();
}
publicvoidprintItMyWay(Graphics2Dg){//分别绘画长方体的三个可见面
g.drawPolygon(newint[]{300,280,280+length,300+length},newint[]{40,80,80,40},4);
g.drawPolygon(newint[]{280,280,280+length,280+length},newint[]{80,80+height,80+height,80},4);
g.drawPolygon(newint[]{280+length,280+length,300+length,300+length},newint[]{80,80+height,40+height,40},4);
}
}
classCircleimplementsFigure{
intx,y;
intr;
Circle(){
x=1;
y=1;
r=1;
}
Circle(inta,intb,intc){
x=a;
y=b;
r=c;
}
publicdoublegetL(){
return2*3.14*r;
}
publicdoublegetS(){
return3.14*r*r;
}
publicStringPrintItMyWay(){
return"圆的圆心坐标为:
"+"("+x+","+y+")"+"半径为:
"+r+"周长为:
"+getL()+"面积为:
"+getS();
}
publicvoidprintItMyWay(Graphics2Dg){
g.drawOval(x,y,r,r);
}
}
classClinderextendsCircle{
intheight;
Clinder(){
super();
height=1;
}
Clinder(inta,intb,intc,intd){
super(a,b,c);
height=d;
}
publicdoublegetS(){
return2*super.getS()+super.getL()*height;
}
publicStringPrintItMyWay(){
return"圆柱的顶面圆心坐标为:
"+"("+x+","+y+","+height+")"+"半径为:
"+r+"圆柱面积为:
"+getS();
}
publicvoidprintItMyWay(Graphics2Dg){
intl=2*r;//l为x轴尺寸
intd=(int)(0.5*r);//d为y轴尺
intd1=(int)(0.5*d);
g.drawOval(x,y,l,d);
g.drawLine(x,y+d1,x,y+d1+height);
g.drawLine(x+l,y+d1,x+l,y+d1+height);
g.drawOval(x,y+height,l,d);
}
运行界面:
4.心得体会或备忘录(一定要记录,可包括调试感悟、代码注解等)
1.第三部分中就算标签没有内容也要初始化。
2.如果实现某接口的类不是抽象类,则该类必须实现对应接口的所有抽象方法。
3.绘制图形的程序有点难
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 实验