级java语言实验3指导面向对象程序设计继承封装多态Word格式文档下载.docx
《级java语言实验3指导面向对象程序设计继承封装多态Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《级java语言实验3指导面向对象程序设计继承封装多态Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
(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]→变量,用于共发线程的共享
(4)、成员方法
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);
-----------------------------------------------------------------------------------------------------------------
填写的语句是:
{return(width+length)*2;
{returnwidth*length;
{System.out.print("
+width);
{super(side,side);
{returnwidth*4;
System.out.println("
边长为"
+width+"
的正方形"
);
正方形的周长为"
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="
+y+"
Radius="
+radius;
}
publicclassInheritanceTest{
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+"
+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(){
empty()){
top--;
returndata[top+1];
return'
\0'
publicbooleanempty(){
returntop==-1;
publicbooleanfull(){
returntop==maxsize-1;
}
publicclassStcckDemo{
CharStacks=newCharStack();
s.initStack();
s.push('
A'
B'
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(){
我喜欢睡觉时做梦"
publicvoidSmoking(){
我不喜欢抽烟"
publicvoidGoFishing(){
我喜欢钓鱼"
publicvoidWatchTV(){
我喜欢看电视"
publicvoidCook(){
我不太会做菜"
}}
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(){
Wind5.play()"
publicStringwhat(){return"
Wind5"
publicvoidadjust(){}
classPercussion5implementsInstrument5{
publicvoidpl