面向对象Java实验03继承接口和多态.docx
《面向对象Java实验03继承接口和多态.docx》由会员分享,可在线阅读,更多相关《面向对象Java实验03继承接口和多态.docx(13页珍藏版)》请在冰豆网上搜索。
面向对象Java实验03继承接口和多态
电子信息学院
实验报告书
课程名:
面向对象程序设计(Java)
题目:
实验03继承、接口和多态
实验类别:
【验证、设计】
班级:
BX1210
学号:
121003531028
姓名:
俞佳星
一、实验目的
(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)
packagecn.edu.sdju.no28.johnson;
publicclasstestBall{
publicstaticvoidmain(Stringargs[]){
balla=newball
(2);
a.setR(3);
System.out.println("球半径:
"+a.getR());
billiardsb=newbilliards(3,"red");
b.setColor("bule");
b.setR
(2);
b.show();
}
}
classball{
privatedoubler;
ball(){
r=0;
}
ball(doubler){
this.r=r;
}
voidsetR(doubler){
this.r=r;
}
doublegetR(){
returnr;
}
}
classbilliardsextendsball{
privateStringcolor;
billiards(){
super();
color="write";
}
billiards(doubler,Stringcolor){
super(r);
this.color=color;
}
voidsetColor(Stringcolor){
this.color=color;
}
voidshow(){
System.out.println("台球颜色;"+color+"\n台球半径:
"+super.getR());
}
}
(1)运行结果
(2)
packagecn.edu.sdju.no28.johnson;
publicclasstestDemo{
publicstaticvoidmain(Stringargs[]){
driverfd=newfemaleDriver("female",20);
drivermd=newmaleDriver("male",20);
vehiclevb=newbus("bus",239);
vehiclevc=newcar("car",234);
fd.drives(vc);
vb.dirvedByDriver(md);
}
}
abstractclassdriver{
Stringgender;
intage;
publicdriver(Stringgender,intage){
this.gender=gender;
this.age=age;
}
abstractvoiddrives(vehiclev);
}
abstractclassvehicle{
Stringtype;
intid;
publicvehicle(Stringtype,intid){
this.type=type;
this.id=id;
}
abstractvoiddirvedByDriver(driverwho);
}
classfemaleDriverextendsdriver{
publicfemaleDriver(Stringgender,intage){
super(gender,age);
}
voiddrives(vehiclev){
System.out.println("A"+gender+"drivesa"+v.type);
}
}
classmaleDriverextendsdriver{
publicmaleDriver(Stringgender,intage){
super(gender,age);
}
voiddrives(vehiclev){
System.out.println("A"+gender+"drivesa"+v.type);
}
}
classbusextendsvehicle{
publicbus(Stringtype,intid){
super(type,id);
}
voiddirvedByDriver(driverwho){
System.out.println("A"+who.gender+"drivesa"+type);
}
}
classcarextendsvehicle{
publiccar(Stringtype,intid){
super(type,id);
}
voiddirvedByDriver(driverwho){
System.out.println("A"+who.gender+"drivesa"+type);
}
}
(2)运行结果
packagecn.edu.sdju.no28.johnson;
importjava.util.Random;
publicclasslimitRun{
publicstaticvoidmain(Stringargs[]){
vehicle[]ve=newvehicle[20];
for(inti=0;i<20;i++){
Randomrad=newRandom();
ve[i]=newcar("car",rad.nextInt(10000));
}
for(inti=0;i<20;i++){
if(ve[i].id%2==0)
System.out.println("车牌为:
"+ve[i].id+"可以通过");
else
System.out.println("车牌为:
"+ve[i].id+"不可以通过");
}
}
}
(2)运行结果
(3)
packagecn.edu.sdju.no28.johnson;
publicclasstestStu{
publicstaticvoidmain(String