级java语言实验3指导面向对象程序设计继承封装多态.docx

上传人:b****6 文档编号:7397268 上传时间:2023-01-23 格式:DOCX 页数:17 大小:34.21KB
下载 相关 举报
级java语言实验3指导面向对象程序设计继承封装多态.docx_第1页
第1页 / 共17页
级java语言实验3指导面向对象程序设计继承封装多态.docx_第2页
第2页 / 共17页
级java语言实验3指导面向对象程序设计继承封装多态.docx_第3页
第3页 / 共17页
级java语言实验3指导面向对象程序设计继承封装多态.docx_第4页
第4页 / 共17页
级java语言实验3指导面向对象程序设计继承封装多态.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

级java语言实验3指导面向对象程序设计继承封装多态.docx

《级java语言实验3指导面向对象程序设计继承封装多态.docx》由会员分享,可在线阅读,更多相关《级java语言实验3指导面向对象程序设计继承封装多态.docx(17页珍藏版)》请在冰豆网上搜索。

级java语言实验3指导面向对象程序设计继承封装多态.docx

级java语言实验3指导面向对象程序设计继承封装多态

上机实验三:

面向对象程序设计(继承、封装、多态)

类是面向对象程序设计的基础,是Java的核心和本质所在,在Java中,所有的语言元素都封装在类中。

编写java程序的过程就是从现实世界中抽象出java可实现的类,并用合适的语句定义它们的过程,本节将学习类的应用,以及如何创建类的实例,通过类的继承更有效的组织程序结构,明确类之间的关系。

掌握本节所讲的内容后,读者就可以使用面向对象技术编写java程序了。

接口是特殊的抽象类,只包含常量和方法的定义,而没有方法的实现,也就是说接口是方法定义和常量值的集合。

包是Java语言中有效管理类的一个机制。

通过关键字package声明包语句,package语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。

使用import语句可以引入包中的类。

一、实验目的

1)掌握类的定义和使用

2)掌握对象的声明和使用

3)了解构造函数的概念和使用

4)掌握类的继承关系和派生方法

5)掌握多态的概念与使用

6)掌握接口的定义和使用

7)掌握Java中包的应用

二、实验内容

1)类的声明

2)定义类成员变量以及成员方法

3)实例化类、创建类对象以及类方法的调用

4)类的继承

5)通过实例理解接口的定义

6)通过实例熟悉接口的应用

7)正确应用Java中包和import语句

三、实验步骤

1)类和类的实例化

一个类的实现包括两部分:

类声明和类体。

(1)、类声明

[public][abstract][final]classclassName[extendssuperclassName]

[implementsinterfaceNameList]

{……}

期中修饰符[public][abstract][final]说明类的属性

className为类名

superclassName为父类的名字

interfaceNameList为类实现的接口列表

(2)、类体

类体定义如下

classclassName

{

[public|protected|private][static][final][transient][volatile]

TypevariableName;//成员变量

[public|protected|private][static][final][abstract][native][synchronized]

returnTypemethondName([paramList])[throwsexceptionList]

{statements}//成员方法

}

 

(3)、成员变量

成员变量的声明方式如下

[public|protected|private][static][final][transient][volatile]

TypevariableName;//成员变量

其中:

[public|protected|private]→可见性

[static]→静态变量(类变量),相当于实例变量

[final]→常量

[transient]→暂时性变量,用于对象存档

[volatile]→变量,用于共发线程的共享

(4)、成员方法

[public|protected|private][static][final][abstract][native][synchronized]

returnTypemethondName([paramList])[throwsexceptionList]//方法体的声明

{statements}//方法体

其中:

[public|protected|private]→可见性

[static]→静态方法,也叫类方法,可以通过类名直接调用

[final]→方法不能被重写

[abstract]→抽象方法,没有方法体(体现多态时常用)

[native]→集成其他语言的代码

[synchronized]→控制多个并发线程的访问

例子3-1请根据注释填写语句,并上机调试成功

根据注释添加语句,并调试和修改程序,使其能够执行。

---------------------------------------------------------------------------------------------------------------------

classRetangle{

publicRetangle(doublel,doublew)

{length=l;width=w;}

publicdoublecalcPerimeter()//返回周长

{

(1)}

publicdoublecalcArea()//返回面积

{

(2)}

publicvoidShow()//显示矩形的长和宽

{(3)}

protecteddoublelength;

protecteddoublewidth;

}

classSquareextendsRetangle{

publicSquare(doubleside)//调用父类的构造方法

{(4)}

publicdoublecalcPerimeter()

{returnwidth*4;}

publicvoidShow(){

System.out.println(“边长为”+width+“的正方形”);

}

}

publicclassTest{

publicstaticvoidmain(Stringargs[]){

Squaresq1=newSquare(2.0);

sq1.Show();

System.out.println("正方形的边长为"+sq1.calcPerimeter());

(1)return(width+length)*2;

(2)returnwidth*length;

(3)System.out.print("length="+length+"\n"+"width="+width;

(4)super(side,side);

}

}

-----------------------------------------------------------------------------------------------------------------

填写的语句是:

classRetangle{

publicRetangle(doublel,doublew)

{length=l;width=w;}

publicdoublecalcPerimeter()//返回周长

{return(width+length)*2;}

publicdoublecalcArea()//返回面积

{returnwidth*length;}

publicvoidShow()//显示矩形的长和宽

{System.out.print("length="+length+"\n"+"width="+width);

}

protecteddoublelength;

protecteddoublewidth;

}

classSquareextendsRetangle{

publicSquare(doubleside)//调用父类的构造方法

{super(side,side);}

publicdoublecalcPerimeter()

{returnwidth*4;}

publicvoidShow(){

System.out.println("边长为"+width+"的正方形");

}

}

publicclassTest{

publicstaticvoidmain(Stringargs[]){

Squaresq1=newSquare(2.0);

sq1.Show();

System.out.println("正方形的周长为"+sq1.calcPerimeter());

}

}

 

2)类的继承

继承是面向对象程序设计的方法中的一种重要手段,通过继承可以更有效的组织程序的结构,明确类之间的关系。

继承通过extends关键字来实现,子类继承父类的属性和行为,同时可以修改父类的属性和行为,并添加新的属性和行为。

Java不支持多重继承。

创建子类的格式如下

classSubClassextendsSuperClass{

……

}

其中SubClass→子类的名称

extends→继承的关键字

SuperClass→父类的名字

例子3-2请分析程序,填写语句的功能注释,并上机调试成功。

下面这个例子通过点、圆的层次结构,介绍类的继承。

----------------------------------------------------------------------------

importjava.text.DecimalFormat;//调用格式化数字输出

importjavax.swing.JOptionPane;//joptionpane让您轻松弹出一个标准的对话框

classPoint{//父类点的的定义

protectedintx,y;//定义点的坐标

publicPoint(){//确定构造函数

setPoint(0,0);

}

publicPoint(inta,intb){//构造函数重载带参数的构造函数

setPoint(a,b);

}publicvoidsetPoint(inta,intb){//(

1)

x=a;

y=b;

}

publicintgetX(){returnx;}//获得X的坐标

publicintgetY(){returny;}//获得Y的坐标

publicStringtoString(){

return"["+x+","+"y"+"]";

}

}

/*子类圆的定义*/

classCircleextendsPoint{//圆类继承父类点类

protecteddoubleradius;//定义圆的半径

publicCircle(){setRadius(0);}//定义子类的构造函数,隐含调用了父类的构造函数

publicCircle(doubler,inta,intb){

super(a,b);//

(2)

setRadius(r);

}

publicvoidsetRadius(doubler){

radius=(r>=0.0?

r:

0.0);//(3)

}

publicdoublegetRadius(){//获得圆半径

returnradius;

}

publicdoublearea(){//(4)

returnMath.PI*radius*radius;

}

publicStringtoString(){//圆的半径。

以及圆心坐标转换成字符串输出

return"Center="+"["+x+","+y+"]"+";Radius="+radius;

}

}

publicclassInheritanceTest{

publicstaticvoidmain(Stringargs[]){

PointpointRef,p;//声明两点对象

CirclecircleRef,c;//声明两圆对象

Stringoutput;//定义一个字符串变量

p=newPoint(30,50);//给点对象赋值

c=newCircle(2.7,120,89);//给圆对象赋值

//把点对象和圆对象转换成字符串后给字符串output赋值

output="Pointp:

"+p.toString()+"\nCirclec:

"+c.toString();

pointRef=c;

output=output+"\n\nCirclec(viapoineRef):

"+pointRef.toString();

circleRef=(Circle)pointRef;

output=output+"\n\nCirclec(viapoineRef):

"+circleRef.toString();

DecimalFormatprecision2=newDecimalFormat("0.00");

output+="\nAreaofc(viacircleRef):

"+precision2.format(circleRef.area());

//将圆定义成点对象输出

if(pinstanceofCircle){//(5)

circleRef=(Circle)p;

output+="\n\ncastsuccessful";

}elseoutput+="\n\npdosenotrefertoaCircle";

//利用对话框输出相关信息

JOptionPane.showMessageDialog(null,output,

"InheritanceTset",JOptionPane.INFORMATION_MESSAGE);

//退出

System.exit(0);

}

}

 

语句的功能注释:

(1)方法成员,设置变量x、y

(2)调用父类的构造函数

(3)设置半径

(4)求取面积

 

2.接口的定义与应用

接口声明的形式如下所示:

interface接口名字

{……//常量定义和方法定义

}

接口使用的关键字是implements,形式如下所示:

classAimplementsPrintable,Addable

其中类A中使用接口Printable和Addable

接口的特点:

1.类体中必须实现接口中定义的所有方法;

2.接口中的方法和常量必须是public的。

3.实现方法时,方法头必须一致(返回值类型,名字,参数);

4.父类被继承时,接口同时被继承;

5.接口也可被继承,关键字为extends;

6.接口一般表示功能,而类一般表示属性。

例子3-3本实例实现了一个字符栈。

程序思路是:

首先定义一个字符栈的接口CharStackInterface,定义了栈的空间容量,规定栈所包含的方法,然后定义栈类CharStack,该类实现了字符栈的接口,最后编写测试类StackDemo进行测试。

请根据编程思路实现字符栈的接口CharStackInterface,并调试程序正确运行,写出程序执行结果。

------------------------------------------------------------------------------------------------------------------------------

interfaceCharStackinterface{

//需要实现的字符栈接口

}

classCharStackimplementsCharStackinterface{

chardata[];

inttop;

CharStack(){

data=newchar[maxsize];

}

publicvoidinitStack(){

top=-1;

}

publicbooleanpush(charx){

if(!

full()){

data[++top]=x;

returntrue;

}

else{

returnfalse;

}

}

publiccharpop(){

if(!

empty()){

top--;

returndata[top+1];

}

else{

return'\0';

}

}

publicbooleanempty(){

returntop==-1;

}

publicbooleanfull(){

returntop==maxsize-1;

}

}

publicclassStcckDemo{

publicstaticvoidmain(Stringargs[]){

CharStacks=newCharStack();

s.initStack();

s.push('A');

s.push('B');

System.out.println(s.pop());

System.out.println(s.pop());

}

}

字符栈的接口CharStackInterface:

 

程序的执行结果:

 

四、上机实践

1.编写程序:

在圆类的基础上派生出了圆锥类,按照注释填空,并调试执行成功,写出程序的执行结果。

classCircle

{doubler;

Circle(){

(1)}//无参构造方法,默认半径为1.0

Circle(doublea)//有参构造方法

{

(2)}

doubleArea(){(3)}//返回面积

doubleGirth(){(4)}//返回周长

}

classConeextendsCircle{

doubleh;

Cone()

{super();

h=1.0;

}

Cone(doublerr,doublehh){

(5)//为半径和高赋值

}

doubleV(){(6)}//返回圆锥的体积

}

publicclassConeTest{

publicstaticvoidmain(Stringargs[])

{Conec1=newCone();

System.out.println(c1.V());

Conec2=newCone(1.0,3.0);

System.out.println(c2.V());

}

}

------------------------------------------------------------------------------

按照注释的填空:

(1)r=1.0

(2)this.a=a;

(3)returnArea

(4)returnGirth

(5)rr=r;hh=h;

(6)returnV

 

程序的执行结果:

 

2.下面程序实现了抽象类的继承和接口的实现,同时还体现了接口的回调和向上转型,请调试该程序,根据注释填空,并写出程序执行结果。

-----------------------------------------------------------------------------

abstractclassPerson{

publicabstractvoidEat();

publicabstractvoidSleep();

}

interfaceFather{

publicvoidSmoking();

publicvoidGoFishing();

}

interfaceMon{

publicvoidWatchTV();

publicvoidCook();

}

classMe{//

(1)继承Person类,实现Father和Mon接口

publicvoidEat(){

System.out.println("我喜欢吃鱼香茄子");

}

publicvoidSleep(){

System.out.println("我喜欢睡觉时做梦");

}

publicvoidSmoking(){

System.out.println("我不喜欢抽烟");

}

publicvoidGoFishing(){

System.out.println("我喜欢钓鱼");

}

publicvoidWatchTV(){

System.out.println("我喜欢看电视");

}

publicvoidCook(){

System.out.println("我不太会做菜");

}}

publicclassTest3{publicstaticvoidmain(String[]args){

Personp1=newMe();

p1.Eat();

//

(2)调用p1的Sleep()方法

Monm1=(Mon)p1;

//(3)调用m1的WatchTV()方法

m1.Cook();

}}

----------------------------------------------------------------------------------------------------------------------

根据注释填空:

 

程序执行结果:

 

3.将程序上机调试成功,并写出程序执行结果。

----------------------------------------------------------------------------------------------------------------------

importjava.util.*;

interfaceInstrument5{

inti=5;

voidplay();

Stringwhat();

voidadjust();

}

classWind5implementsInstrument5{

publicvoidplay(){

System.out.println("Wind5.play()");

}

publicStringwhat(){return"Wind5";}

publicvoidadjust(){}

}

classPercussion5implementsInstrument5{

publicvoidpl

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

当前位置:首页 > PPT模板 > 自然景观

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

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