实验报告 9.docx
- 文档编号:23873014
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:11
- 大小:161.15KB
实验报告 9.docx
《实验报告 9.docx》由会员分享,可在线阅读,更多相关《实验报告 9.docx(11页珍藏版)》请在冰豆网上搜索。
实验报告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());}}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验报告 实验 报告