




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA 程序设计程序设计单元五单元五 接口与包接口与包 v学习目标:学习目标: 掌握Java接口的使用 理解接口与抽象类的异同 了解Java包的使用 掌握Java的访问控制修饰符的使用 了解Java API 任务一任务一 计算各种形状的面积与周长计算各种形状的面积与周长 1任务二任务二 用包管理程序用包管理程序23拓展任务拓展任务任务一任务一 计算各种形状的面积与周长计算各种形状的面积与周长 v一、任务描述在单元四的最后一个任务中,我们建立了形状抽象类,并从中派生出矩形与圆形的子类,实现了不同形状的面积计算功能。本任务要求进一步扩展原有程序,在计算各种形状面积的基础上,增加周长的计算功能。而
2、且,希望程序具备良好的可读写和扩展性,例如可以进一步增加新的形状或者新的功能。 v1.改写抽象类 图5.1 Shape类及其子类vShape类可以定义为以下形式vabstract class Shapevprotected String name;vShape(String n)name=n;vabstract double area();/计算面积的抽象方法vabstract double perimeter();/计算周长的抽象方法v v2.增加计算周长的接口增加计算周长的接口v(1)声明接口)声明接口v修改父类抽象类的做法可以实现本任务要求的功能,然而却不够灵活。每当要增加一个新的功能,
3、我们都得修改父类抽象类,增加新的抽象方法,并在子类中给出具体实现。而子类一旦继承了抽象类,就必须实现这个方法,而不能选择性的继承。v在本任务中,将使用更灵活的“接口”方式,来实现新增的计算周长的功能。v编写代码,保存为“Shape.java”。 v (2)测试接口)测试接口v 编写主类及main()方法,测试以上接口的作用,程序保存为“ShapeCalDemo.java”。v 程序程序5.2 ShapeCalDemo:v public class ShapeCalDemovpublic static void main(String args)vRect R=new Rect(10,20);v
4、Circle C=new Circle(15);vSystem.out.println(R.name+的面积为+R.area()+,的周长为+R.perimeter();vSystem.out.println(C.name+的面积为+C.area()+,的周长为+C.perimeter();vv v3.更灵活的使用接口更灵活的使用接口v(1)全面改写程序)全面改写程序v程序5.1中,我们在原有程序的基础上,增加接口,实现新的功能。事实上,我们可以使用接口,全面的改写原来的程序,使其结构更加清晰,也更容易扩展。v主要的思路是将所有的功能都用接口来实现,而父类抽象类Shape仅保留一个名称属性。在
5、子类Rect和Circle中,通过实现接口来实现具体的功能。v全面改写的程序保存为“ShapeCalTest.java”。 v (2)扩展功能)扩展功能v 若任务进一步要求计算正方形的周长和面积,我们只需新增一些简单的代码即可实现。继续派生出子类Square正方形类。而正方形是矩形的特例,显然,从矩形类Rect继承比从抽象类Shape继承更加简单。v Square类的声明如下。正方形无论是面积还是周长的计算,都可以套用矩形的方法。因此,不必重写三个实现功能的方法。v class Square extends Rectv vSquare() this(0); vSquare(double a)v
6、super(a,a);vname=正方形;vv v三、相关知识v1.接口的使用 v接口的定义使用interface关键字,通用格式为vinterface 接口名v接口体vv接口名通常以able或ible结尾,表明接口能完成一定的行为。v接口中只能定义常量和抽象方法。常量默认为final static修饰,无论是否显式的使用修饰符。而方法默认为public abstract,同样无论是否显式的使用修饰符。 v【例5.1】接口的声明vinterface Computablevint N=100;vint f(int x,int y);vpublic abstract void g();vv代码声明
7、了名为Computable的接口,其中N为常量,尽管不使用final static修饰符。方法f()和g()同样均为公有的抽象方法,无论其是否使用相应的修饰符。 v 2)实现接口)实现接口v 类的声明中用implements子句来表示一个类实现了某个接口。在类体中,接口中定义的常量可以直接使用;而所有的抽象方法都必须给出具体的实现,且必须使用public修饰。v 虽然一个类只能继承一个父类,却可以实现多个接口,只需在implements子句中用逗号分隔。v 实现接口的通用格式为:v class 类名 implements 接口名1,接口名2 v 【例5.2】接口的实现v class Test
8、implements Computablevpublic int f(int x,int y) return x+y; vpublic void g() v v 2.接口的继承接口的继承v 与类一样,接口也可以继承。Java语言不支持类的多重继承,却支持接口的多重继承。也就是说,Java的接口可以同时具有不止一个父接口。v 接口的继承与类的继承一致,都使用extends关键字,通用格式如下:v 接口名1 extends 接口名2,接口名3,v声明新的常量和抽象方法 ;v v 在程序5.3中,可以使用接口的多继承机制将三个接口组合为一个:v interface Cal extends CalPe
9、rimeter,CalArea,OutPut v四、任务小结v本任务介绍了接口的声明和使用方式。接口的本质就是一种比抽象类更为抽象的类,它把方法的特征和方法的实现分割开来,是Java语言灵活性的又一体现。在实际编程中,很多不偏于使用抽象类的继承来实现的情形就可以使用接口的实现来替代。在编程中使用接口往往使得我们的Java程序更具可读性和可扩展性。 任务二任务二 用包管理程序用包管理程序 v一、任务描述v在单元三任务二中,我们建立了点类Point,实现了平面上两点间距离的计算。本任务要求将平面上的两点扩展到空间中的两点,通过对Point类的继承,建立空间中的点类,并计算两点之间的距离。 v二、任
10、务实施二、任务实施 v1.使用简单的包结构使用简单的包结构v(1)创建包)创建包v使用包组织和管理程序,让同一程序的源文件按照包的划分置于不同的路径,能更合理的管理程序,使代码的复用成为可能。v简化实现形状计算功能的程序5.3,仅保留矩形的计算。首先将程序除主类以外的部分(即程序5.3的第一部分与第二部分中矩形类的定义)保存为一个源文件,声明为同一包,且文件命名为“Rect.java”。 程序程序5.4 Rect:package testpkg; /将本文件中的所有类声明为testpkg包abstract class Shape protected String name;/抽象类interf
11、ace CalPerimeter abstract public double perimeter(); /计算周长的接口interface CalArea abstract public double area(); /计算面积的接口interface OutPut abstract public void outInfo(); /输出信息的接口public class Rect extends Shape implements CalPerimeter,CalArea,OutPutprivate double a,b;public Rect() this(0,0); public Rect
12、(double a, double b) name=矩形; this.a=a; this.b=b; /矩形类 v (2)使用包)使用包v 修改程序5.3中的主类,即第三部分,保存为“ShapeCalTest.java”。并在程序的头部加上导入包的import语句。 v 程序程序5.5 ShapeCalTest:v import testpkg.Rect/导入包v public class ShapeCalTest/主类vpublic static void main(String args)vRect sr=new Rect(10,20);vsr.outInfo();vv v2.使用层次的包结
13、构 v按照任务功能要求,组织包结构如下:vshapepkg存放抽象的形状类Shapevshapepkg.shapes存放各种具体形状类,如矩形类Rect、圆形类Circlevshapepkg.fun存放实现各种功能的接口 程序程序5.6 ShapeCalTest: v 3.导入包扩展程序 v (1)计算并输出)计算并输出10个随机圆形的面积个随机圆形的面积v程序程序5.7 RCTest:v (2)计算正方形的周长与面积)计算正方形的周长与面积v 正方形为矩形的特例,因而可以在Rect类的基础之上进行扩展。v程序程序5.8 SquareCalTest: v (3)计算立方体的表面积与体积)计算立
14、方体的表面积与体积v 立方体有三个属性,即长宽高。立方体不能计算周长和面积,但是可以计算体积和表面积。因此可以实现CalArea()接口,用于计算表面积,同时新增接口CalVolume计算体积。v程序程序5.9 CubeCalTest v三、相关知识v1.包的定义与使用 v2.访问权限 v3.Java API 包 v四、任务小结v本任务在原有形状计算任务的基础之上,使用了包更加规范的组织和管理了类与接口,使程序具备了更明晰的结构和更好的扩展性。在本书的其余内容中,为了突出重点简化程序,可能很少使用包。但包仍然是面向对象的Java语言很重要的一种机制,尤其在面对一些大型应用程序的开发,良好的管理与重用机制将必不可少。 拓展任务拓展任务 v一、思考v1接口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科技人才的创新能力培养与实践
- 个人水产养殖合同范本
- 维修电工工作总结(15篇)
- 环境保护建议书(汇编15篇)
- 森林防火典型发言稿范文(5篇)
- 电商行业人才需求分析与培养策略
- 农民租田合同范本
- 业务权益转让合同范本
- 买卖农民玉米秸秆合同范本
- 农村山林分成承包合同范本
- 新修订中华人民共和国畜牧法全文解读学习
- 统编版语文五年级下册第二单元习作:写读后感课件
- 学校提高《规范书写水平、传承汉字文化》活动方案3篇
- 幕墙施工现场安全检查方案
- 2023年4月2日湖北事业单位联考C类《职业能力倾向测验》试题
- 新课标背景下“教学评一体化”评的策略
- 儿童儿童矮身材临床诊治矮身材临床诊治
- 早产儿护理查房课件图
- 2.3.1直线与平面垂直的判定(公开课)省公开课获奖课件说课比赛一等奖课件
- 03S702钢筋混凝土化粪池-标准图集
- Unit 2 Bridging Cultures Reading for writing 课件-高中英语(2019)选择性必修第二册
评论
0/150
提交评论