实验报告 9.docx

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

实验报告 9.docx

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

实验报告 9.docx

实验报告9

实验题目

类的继承性的练习

实验地点

实验楼409

实验日期

2014-04-23

机器号

10

1、实验目的及要求

实验目的

  通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想,了解类的封装方法,以及如何创建类和对象,掌握面向对象程序设计的继承性的作用。

实验要求

1.编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序;

2.设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。

所以,通常要对子类进行扩展,即添加新的属性和方法。

这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。

2、实验内容

1.类的继承性练习

  新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。

新类还可添加新的变量和方法。

这种现象就称为类的继承。

  当建立一个新类时,不必写出全部成员变量和成员方法。

只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。

被继承的类称为父类或超类(superclass),这个新类称为子类。

  Java提供了一个庞大的类库让开发人员继承和使用。

设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。

你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。

所以,通常要对子类进行扩展,即添加新的属性和方法。

这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。

继承的意义就在于此。

1.1创建将被继承的类

(1)程序源代码如下。

  publicclassEXP3_7

  {

   protectedStringxm;//具有保护修饰符的成员变量

   protectedintxh;

   voidsetdata(Stringm,inth)//设置数据的方法

   {

    xm=m;

    xh=h;

   }

   publicvoidprint()//输出数据的方法

   {

    System.out.println(xm+","+xh);

   }

  }

(2)编译源程序。

1.2创建将被继承的类

(1)程序功能:

通过EXP3_7类产生子类EXP3_8,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、xi(系)。

在程序中调用了父类的print方法,同时可以看出子类也具有该方法。

(2)程序源代码如下。

  classEXP3_8extendsEXP3_7{

   protectedStringxy;

   protectedStringxi;

   publicstaticvoidmain(Stringargs[]){

    EXP3_7p1=newEXP3_7();

    p1.setdata("李四",12321);

    p1.print();

    EXP3_8s1=newEXP3_8();

    s1.setdata("张三",12345);//调用父类的成员方法

    s1.xy="成都信息工程学院";//访问本类的成员变量

    s1.xi="计算机系";//访问本类的成员变量

    s1.print();

    System.out.print(s1.xm+","+s1.xy+","+s1.xi);

   }

  }

(1)编译并运行,结果如图3.7所示。

图3.7

1.3了解成员方法的覆盖方式

  通过继承子类可以继承父类中所有可以被子类访问的成员方法,但如果子类的方法与父类方法同名,则不能继承,此时称子类的方法覆盖了父类的方法,简称为方法覆盖(override)。

方法覆盖为子类提供了修改父类成员方法的能力。

例如,子类可以修改层层继承下来的Object根类的toString方法,让它输出一些更有用的信息。

下面的程序显示了在子类Circle中添加toString方法,用来返回圆半径和圆面积信息。

(1)编写覆盖Object类toString方法的程序文件EXP3_9.java,源代码如下。

  classCircle{

   privateintradius;

   Circle(intr){

    setRadius(r);

   }

   publicvoidsetRadius(intr){

    radius=r;

   }

   publicintgetRadius(){

    returnradius;

   }

   publicdoublearea(){

    return3.14159*radius*radius;

   }

   publicStringtoString(){

    return"圆半径:

"+getRadius()+"圆面积:

"+area();

   }

  }

  publicclassEXP3_9{

   publicstaticvoidmain(Stringargs[]){

    Circlec=newCircle(10);

    System.out.println("\n"+c.toString());

   }

  }

(2)编译并运行,结果如图3.8所示。

图3.8

2.this、super和super()的使用

(1)程序功能:

程序功能:

说明this、super和super()的用法。

程序首先定义Point(点)类,然后创建点的子类Line(线)。

最后通过LX3_10类输出线段的长度。

程序中通过super(a,b)调用父类Point的构造方法为父类的x和y赋值。

在子类Line的setLine方法中,因为参数名和成员变量名相同,为给成员变量赋值,使用this引用,告诉编译器是为当前类的成员变量赋值。

在length和toString方法中使用父类成员变量时,使用super引用,告诉编译器使用的是父类的成员变量。

(2)程序源代码如下。

  classPoint{

   protectedintx,y;

   Point(inta,intb){

    setPoint(a,b);

   }

   publicvoidsetPoint(inta,intb){

    x=a;

    y=b;

   }

  }

  classLineextendsPoint{

   protectedintx,y;

   Line(inta,intb){

    super(a,b);

    setLine(a,b);

   }

   publicvoidsetLine(intx,inty){

    this.x=x+x;

    this.y=y+y;

   }

   publicdoublelength(){

    intx1=super.x,y1=super.y,x2=this.x,y2=this.y;

    returnMath.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

   }

   publicStringtoString(){

    return"直线端点:

["+super.x+","+super.y+"]["+

        x+","+y+"]直线长度:

"+this.length();

   }

  }

  publicclassEXP3_10{

   publicstaticvoidmain(Stringargs[]){

    Lineline=newLine(50,50);

    System.out.println("\n"+line.toString());

   }

  }

(3)编译并运行,结果如图3.9。

图3.9

3.

(1)先定义一个矩形类,有长、宽,和方法arear计算面积,还有构造方法来初始化矩形的大小

(2)继承上例中的类,得到一个子类立方体类,增加高度成员,利用构造函数可对父类的成员变量赋初值。

定义方法val(调用父类方法area计算体积)

(3)生成具体立方体类对象,计算体积

3、过程及结果

1.类的继承性练习  

classEXP3_7{

protectedStringxm;//具有保护修饰符的成员变量

protectedintxh;

voidsetdata(Stringm,inth)//设置数据的方法

{

xm=m;

xh=h;

}

publicvoidprint(){//输出数据的方法

System.out.println(xm+","+xh);

}

}

classEXP3_8extendsEXP3_7{

protectedStringxy;

protectedStringxi;

publicstaticvoidmain(Stringargs[]){

EXP3_7p1=newEXP3_7();

p1.setdata("李四",12321);

p1.print();

EXP3_8s1=newEXP3_8();

s1.setdata("张三",12345);//调用父类的成员方法

s1.xy="成都信息工程学院";//访问本类的成员变量

s1.xi="计算机系";//访问本类的成员变量

s1.print();

System.out.print(s1.xm+","+s1.xy+","+s1.xi);

}

}

图3.7

1.4了解成员方法的覆盖方式

classCircle{

privateintradius;

Circle(intr){

setRadius(r);

}

publicvoidsetRadius(intr){

radius=r;

}

publicintgetRadius(){

returnradius;

}

publicdoublearea(){

return3.14159*radius*radius;

}

publicStringtoString(){

return"圆半径:

"+getRadius()+"圆面积:

"+area();

}

}

classEXP3_9{

publicstaticvoidmain(Stringargs[]){

Circlec=newCircle(10);

System.out.println("\n"+c.toString());

}

}

this、super和super()的使用

classPoint{

protectedintx,y;

Point(inta,intb){

setPoint(a,b);

}

publicvoidsetPoint(inta,intb){

x=a;

y=b;

}

}

classLineextendsPoint{

protectedintx,y;

Line(inta,intb){

super(a,b);

setLine(a,b);}

publicvoidsetLine(intx,inty){

this.x=x+x;

this.y=y+y;}

publicdoublelength(){

intx1=super.x,y1=super.y,x2=this.x,y2=this.y;

returnMath.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));}

publicStringtoString(){

return"直线端点:

["+super.x+","+super.y+"]["+x+","+y+"]直线长度:

"+this.length();}}

classEXP3_10{

publicstaticvoidmain(Stringargs[]){

Lineline=newLine(50,50);

System.out.println("\n"+line.toString());}}

3.

(1)先定义一个矩形类,有长、宽,和方法arear计算面积,还有构造方法来初始化矩形的大小

(2)继承上例中的类,得到一个子类立方体类,增加高度成员,利用构造函数可对父类的成员变量赋初值。

定义方法val(调用父类方法area计算体积)

(3)生成具体立方体类对象,计算体积

abstractclassGeometry{

publicabstractdoublegetArea();}

classPillar{

Geometrybottom;

doubleheight;

Pillar(Geometrybottom,doubleheight){

this.bottom=bottom;

this.height=height;}

publicdoublegetVolume(){

returnbottom.getArea()*height;}}

classRectangleextendsGeometry{

doublea,b;

Rectangle(doublea,doubleb){

this.a=a;

this.b=b;}

publicdoublegetArea(){

returna*b;}}

classApplication{

publicstaticvoidmain(Stringargs[]){

Geometrybottom;

Pillarpillar;

bottom=newRectangle(12,10);

pillar=newPillar(bottom,20);

System.out.println("矩形底的柱体的体积"+pillar.getVolume());}}

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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