级java语言实验3指导(面向对象程序设计(继承、封装、多态))_第1页
级java语言实验3指导(面向对象程序设计(继承、封装、多态))_第2页
级java语言实验3指导(面向对象程序设计(继承、封装、多态))_第3页
级java语言实验3指导(面向对象程序设计(继承、封装、多态))_第4页
级java语言实验3指导(面向对象程序设计(继承、封装、多态))_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2016级java语言实验3指导(面向对象程序设计(继承、封装、多态) 上机实验三:面向对象程序设计 (继承、封装、多态 ) 类是面向对象程序设计的基础,是Java的核心和本质所在,在Java中,所有的语言元 素都封装在类中。编写java程序的过程就是从现实世界中抽象出java可实现的类,并用合适 的语句定义它们的过程, 本节将学习类的应用, 以及如何创建类的实例, 通过类的继承更有 效的组织程序结构, 明确类之间的关系。 掌握本节所讲的内容后, 读者就可以使用面向对象 技术编写java程序了。 接口是特殊的抽象类, 只包含常量和方法的定义, 而没有方法的实现, 也就是说接口是 方法定义和常量

2、值的集合。 包是Java语言中有效管理类的一个机制。 通过关键字package声明包语句,package语句 作为Java源文件的第一条语句,指明该源文件定义的类所在的包。使用import语句可以引 入包中的类。 一、实验目的 1) 掌握类的定义和使用 2) 掌握对象的声明和使用 3) 了解构造函数的概念和使用 4) 掌握类的继承关系和派生方法 5) 掌握多态的概念与使用 6) 掌握接口的定义和使用 7) 掌握Java中包的应用 二、实验内容 1) 类的声明 2) 定义类成员变量以及成员方法 3) 实例化类、创建类对象以及类方法的调用 4) 类的继承 5) 通过实例理解接口的定义 6) 通过实

3、例熟悉接口的应用 7) 正确应用 Java 中包和 import 语句 三、实验步骤 1) 类和类的实例化 一个类的实现包括两部分:类声明和类体。 (1) 、类声明 publicabstractfinal class className extends superclassName implements interfaceNameList 期中修饰符 publicabstractfinal 说明类的属性 className 为类名 superclassName为父类的名字 interfaceNameList为类实现的接口列表 (2)、类体 类体定义如下 class className publ

4、ic|protected|private static Type variableName;成员变量 fin al tra nsie nt volatile public|protected|private static fin al abstract n ativesynchroni zed retur nType meth on dName ( paramList) throws exception List stateme nts成员方法 (3)、成员变量 成员变量的声明方式如下 public|protected|private staticfin altra nsie nt volat

5、ile Type variableName;成员变量 其中:public|protected|private宀可见性 static t 静态变量(类变量),相当于实例变量 final t 常量 transient t 暂时性变量,用于对象存档 volatile t变量,用于共发线程的共享 (4)、成员方法 public|protected|private static fin al abstract n ative synchroni zed return Type meth on dName ( paramList ) throws excepti on List/ 方法体的声明 state

6、me nts 方法体 其中:public|protected|private t可见性 static t静态方法,也叫类方法,可以通过类名直接调用 fin alt方法不能被重写 abstract t抽象方法,没有方法体(体现多态时常用) native t集成其他语言的代码 synchronized t控制多个并发线程的访问 例子3-1请根据注释填写语句,并上机调试成功 根据注释添加语句,并调试和修改程序,使其能够执行。 class Reta ngle public Reta ngle(double l, double w) len gth = l; width = w; public doub

7、le calcPerimeter() / 返回周长 O public double calcArea() / 返回面积 (2) 2 / 14 2016级java语言实验3指导(面向对象程序设计(继承、封装、多态) public void Show() /显示矩形的长和宽 (3) protected double len gth; protected double width; class Square exte nds Reta ngle public Square(double side) /调用父类的构造方法 . public double calcPerimeter() return w

8、idth * 4; public void Show() System.out.pri ntln(边长为”+ width + 的正方形”); public class Test public static void main(String args) Square sq1= new Square(2.0); sq1.Show(); System.out.println(” 正方形的边长为+sq1.calcPerimeter(); (1) return (width+le ngth)*2; (2) retur n width*le ngth; System-.-o-.-3-ifi-lengi-h

9、=-+leng-h+-n-+widl-i=-+wjdl-d 填写的语句是(4)super(side,side); 4 / 14 class Reta ngle public len gth public public public System. protected protected Reta ngle( =l; double double double l, width = w; calcPerimeter() return ( width calcArea() return void Show() out .print( double double width double / w) +

10、 le ngth /返回面积 返回周长 )*2; class Square exte nds * length ; /显示矩形的长和宽 len gth=+le ngth +n length width Reta ngle +width= +width ); /调用父类的构造方法 publicSquare( double side) super (side,side); publicdoublecalcPerimeter() return width * 4; public void Show() System.out .println( 边长为“ + width +的正方形“); 2016级j

11、ava语言实验3指导(面向对象程序设计(继承、封装、多态) II( 6 I 14 public class Test public static voidmai n(Stri ng args) Square sq1= new Square(2.0); sq1.Show(); System. out .println(正方形的周长为+sq1.calcPerimeter(); 2) 类的继承 继承是面向对象程序设计的方法中的一种重要手段,通过继承可以更有效的组织程序 的结构,明确类之间的关系。 继承通过extends关键字来实现,子类继承父类的属性和行为, 同时可以修改父类的属性和行为,并添加新的

12、属性和行为。Java不支持多重继承。 创建子类的格式如下 class SubClass exte nds SuperClass 其中Subclass子类的名称 exte ndsf继承的关键字 Superclass父类的名字 例子3-2请分析程序,填写语句的功能注释,并上机调试成功。 下面这个例子通过点、圆的层次结构,介绍类的继承。 import java.text.DecimalFormat; import javax.swi ng.JOptio nPane; II调用格式化数字输出 / joptionpane让您轻松弹出一个标准的对话框 class Poi nt protected int

13、x,y ; public Poi nt() setPoi nt(0,0); public Poin t(i nt a,i nt b) setPoi nt(a,b); public void setPo in t(i nt a,i nt b) 1) II父类点的的定义 II定义点的坐标 II确定构造函数 II构造函数重载带参数的构造函数 x=a; 2016级java语言实验3指导(面向对象程序设计(继承、封装、多态) y=b; public int getX()return x;/获得 X 的坐标 public int getY() return y;/ 获得 Y 的坐标 public Stri

14、 ng toStri ng() return +x+,+y+; /*子类圆的定义*/ class Circle exte nds Poi nt / 圆类继承父类点类 protected double radius ;/ 定义圆的半径 public Circle() setRadius(O);/定义子类的构造函数,隐含调用了父类的构造函数 public Circle(double r,i nt a,i nt b) super(a,b);(2) setRadius(r); public void setRadius(double r) radius = (r=O.O?r:O.O); /(3 pub

15、lic double getRadius() / 获得圆半径 return radius; public double area() / (4) return Math. Pl*radius*radius; public String toString()/圆的半径。以及圆心坐标转换成字符串输出 return Ce nter=+x+,+y+;Radius=+radius; public class In herita nceTest public static void main(String args) Point pointRef,p;声明两点对象 Circle circleRef,c;/

16、 声明两圆对象 Stri ng output;/定义一个字符串变量 p=new Point(3O,5O); 给点对象赋值 c=new Circle (2.7,12O,89); 给圆对象赋值 把点对象和圆对象转换成字符串后给字符串output赋值 output=Poi ntp:+p.toStri ng()+nCirclec:+c.toStri ng(); poin tRef=c; output=output+nn Circle c(via poin eRef):+po in tRef.toStri ng(); circleRef=(Circle)pointRef; _ output=output

17、+nn Circle c(via poin eRef):+circleRef.toStri ng(); DecimalFormat precisi on2=new DecimalFormat(0.00); output+= n Areaofc(via circleRef):+precisi on 2.format(circleRef.area(); 将圆定义成点对象输出 if( p in sta nceof Circle )/(5) circleRef=(Circle) p; output+=nn cast successful; elseoutput+=nn p dose not refer

18、 to a Circle; /利用对话框输出相关信息 JOpti onPan e.showMessageDialog( null,output, In herita nceTset,JOptio nPa neNFORMATION_MESSAGE); 退出 System.exit(0); 语句的功能注释: (1) (2) (3) (4) 方法成员,设置变量 调用父类的构造函数 设置半径 求取面积 2. 接口的定义与应用 接口声明的形式如下所示: in terface接口名字 8 / 14 2016级java语言实验3指导(面向对象程序设计(继承、封装、多态) /常量定义和方法定义 接口使用的关键

19、字是 implements ,形式如下所示: class A implements Printable , Addable 其中类 A 中使用接口 Printable 和 Addable 接口的特点: 1. 类体中必须实现接口中定义的所有方法; 2. 接口中的方法和常量必须是 public 的。 3. 实现方法时,方法头必须一致(返回值类型,名字,参数) ; 4. 父类被继承时,接口同时被继承; 5. 接口也可被继承,关键字为 extends ; 6. 接口一般表示功能,而类一般表示属性。 例子 3-3 本实例实现了一个字符栈。程序思路是:首先定义一个字符栈的接口 CharStackInter

20、face ,定义了栈的空间容量, 规定栈所包含的方法, 然后定义栈类 CharStack , 该类实现了字符栈的接口,最后编写测试类 StackDemo进行测试。请根据编程思路实现字符 栈的接口 CharStackInterface ,并调试程序正确运行,写出程序执行结果。 interface CharStackinterface /需要实现的字符栈接口 class CharStack implements CharStackinterface char data; int top; CharStack() data=new charmaxsize; public void initStack

21、() top=-1; public boolean push(char x) if(!full() data+top=x; return true ; else return false; public char pop() if(!empty() top-; return datatop+1; else return 0; public boolean empty() return top=-1; public boolean full() return top= maxsize-1; public class StcckDemo public static void main(String

22、 args) CharStack s=new CharStack(); s.i nitStack(); s.push(A); s.push(B); System.out.pri ntl n( s.pop(); System.out.pri ntl n( s.pop(); 字符栈的接口 CharStackI nterface 程序的执行结果: 四、上机实践 ,写出程 1.编写程序:在圆类的基础上派生出了圆锥类,按照注释填空,并调试执行成功 序的执行结果。 class Circle double r ; Circle( ) (1) /无参构造方法,默认半径为 1.0 Circle( double

23、a) /有参构造方法 (2) double Area( ) (3) / 返回面积 double Girth( ) (4) / 返回周长 class Cone exte nds Circle double h; Con e() super (); h=1.0; Con e(double rr,double hh) (5)/为半径和高赋值 double V() (6) /返回圆锥的体积 public class ConeTest public static void main(String args) Cone c1= new Con e(); System.out.pri ntln (c1.V(

24、); Cone c2=new Con e(1.0,3.0); System.out.pri ntln (c2.V(); 按照注释的填空: (1)r=1.0 (2) this.a=a; (3) return Area (4) return Girth (5) rr=r; hh=h; (6) return V 程序的执行结果: cl.冗/3 c2. n 2.下面程序实现了抽象类的继承和接口的实现,同时还体现了接口的回调和向上转型, 请调试该程序,根据注释填空,并写出程序执行结果。 abstract class Person public abstractvoid Eat(); public abs

25、tractvoid Sleep(); in terfaceFather public void Smoking(); public void GoFishing(); in terfaceMon public void WatchTV(); public void Cook(); class Me _/ ( 1)继承 Person 类,实现 Father 和 Mor接口 public void Eat() System. out.println(”我喜欢吃鱼香茄子); public void Sleep() System. out.println(”我喜欢睡觉时做梦”); public voi

26、d Smoking() System. out.println(我不喜欢抽烟); public void GoFishing() System. out.println(我喜欢钓鱼); public void WatchTV() System. out.println(”我喜欢看电视); public void Cook() System. out.println(”我不太会做菜); public class Test3 public static void main(String args) 12 / 14 2016级java语言实验3指导(面向对象程序设计(继承、封装、多态) Pers o

27、n pl = new Me(); p1.Eat(); / Mon m1 = (Mon )p1; / m1.Cook(); (2)调用p1的Sleep()方法 (3)调用m啲 WatchTV()方法 13 / 14 根据注释填空: (1) exte nds Pers on impleme nts Father,M on (2) p1.Sleep (3) m1.Cook 程序执行结果: 我喜欢吃鱼香茄子 我喜欢睡觉时做梦 妈妈喜欢看电视 妈妈不太会做菜 3. 将程序上机调试成功,并写出程序执行结果。 import java.util.*; in terface In strume nt5 int

28、i = 5; void play(); Stri ng what(); void adjust(); class Wind5 impleme nts In strume nt5 public void play() System.out.pri ntln (Wi nd5.play(); 2016级java语言实验3指导(面向对象程序设计(继承、封装、多态) public String what() return Wind5; public void adjust() class Percussion5 implements Instrument5 public void play() System.out

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论