BX110937l李建辉 实验03.docx

上传人:b****7 文档编号:10572565 上传时间:2023-02-21 格式:DOCX 页数:14 大小:683.47KB
下载 相关 举报
BX110937l李建辉 实验03.docx_第1页
第1页 / 共14页
BX110937l李建辉 实验03.docx_第2页
第2页 / 共14页
BX110937l李建辉 实验03.docx_第3页
第3页 / 共14页
BX110937l李建辉 实验03.docx_第4页
第4页 / 共14页
BX110937l李建辉 实验03.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

BX110937l李建辉 实验03.docx

《BX110937l李建辉 实验03.docx》由会员分享,可在线阅读,更多相关《BX110937l李建辉 实验03.docx(14页珍藏版)》请在冰豆网上搜索。

BX110937l李建辉 实验03.docx

BX110937l李建辉实验03

电子信息学院

实验报告书

 

课程名:

面向对象程序设计(Java)

题目:

实验03继承、接口和多态

实验类别:

【验证、设计】

班级:

BX1109

学号:

37

姓名:

李建辉

 

一、实验目的

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

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

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

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

二、实验内容

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

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

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

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

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

(2)定义一个抽象类Driver,它有Stringgender(性别)和intage(年龄)两个成员属性,还有一个抽象的成员方法drives(Vehiclev),并从它派生出FemaleDriver和MaleDriver两个子类。

定义一个抽象类Vehicle,它有Stringtype(车型)和intid(车牌号码)两个成员属性,还有一个抽象的成员方法drivedByDriver(Driverwho),并从它派生出Bus和Car两个子类。

定义一个测试类TestDemo,在其main()方法中先创建fd和md两个Driver对象,然后创建vb和vc两个Vehicle对象。

1先将以上所有类均放置到cn.edu.sdju.exp031包中,然后以两种方式,分别通过调用drives()和drivedByDriver()成员方法输出如下字符串:

AFemaledrivesaCar

AMaledrivesaBus

2通过将Bus和Car类放置到cn.edu.sdju.exp032包中,检验各个类及其成员的访问权限;

③注释掉TestDemo类,在cn.edu.sdju.util包中新建一个LimitRun测试类。

在LimitRun类的main()方法中先创建20个Vehicle对象(随机生成车牌号,车牌号范围为1~1000),并规定只有双号车辆能够通过,输出所有车辆的通过情况。

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

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

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

(4)接口实验

程序文件TestInterface.java。

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

interfacerec_Area_Peri

{intgetArea();

intgetPerimeter();

}

classrectangleimplementsrec_Area_Peri

{intwidth,length;

rectangle(intw,intl)

{width=w;

length=l;

}

publicintgetArea()

{returnwidth*length;}

publicintgetPerimeter()

{return(2*(width+length));}

}

publicclassTestInterface

{publicstaticvoidmain(Stringargs[])

{rectanglerect=newrectangle(10,20);

System.out.println("矩形面积="+rect.getArea());

System.out.println("矩形周长="+rect.getPerimeter());

}

}

 

【思考问题】

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

为什么?

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

为什么?

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

为什么?

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

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

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

(1)

(2)

1)将Bus类和Car类放置到cn.edu.sdju.exp032包中,类型依然为public,则编译正确。

说明public是公共成员,可以在类外被使用。

2)将Bus类和Car类放置到cn.edu.sdju.exp032包中,将Driver类改为protected型,则编译错误。

放回依旧错误。

说明抽象类不能为protected类型。

3)将Bus类和Car类放置到cn.edu.sdju.exp032包中,将Driver类改为package型,则编译错误。

再将Bus类和Car类放回cn.edu.sdju.exp031包中,则编译正确。

说明包作用域成员只能在同一个包中被使用。

4)将Bus类和Car类放置到cn.edu.sdju.exp032包中,将Driver类改为private型,则编译错误。

放回仍然错误。

说明抽象类不能为private类型。

(3)

(4)

出现了错误,因为接口中声明了子方法都必须在子类中具体实现,由于只实现了一个,就出现了错误

出现了错误,因为如果去掉public则只有同一个包中的类才能实现这个借口,不同包的类均无法实现这个接口,使之出现错误。

没有影响,因为接口中定义的方法本来就是抽象的方法,所以就算加上abstract也只是更明确地说明而已,不会造成什么影响。

interfacerec_Area_Peri

{abstractintgetArea();

}

interfacerec_Area_Peri

{abstractintgetPerimeter();

}

四、实验体会

在这次试验中,我对超类和子类间的继承和使用权限有了一定的了解。

但还是不够清晰,尤其是this,super的用法还没能熟练掌握。

接口和抽象类的用法了解也不够深,如果脱离课本或是其他案例的参考,我还是写不出程序。

因为对于一些用法还是不够了解,而且程序写的也不够简洁。

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

当前位置:首页 > 高等教育 > 哲学

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

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