




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主要内容: 1. 什么是接口 2. 接口定义语法 3. 接口的实现 4. 接口使用 5. 一个实际例子:Collection 接口 接口 接口概念 接口是数据类型. 类是数据类型。使用具体类的名字可以定义类的引用型变量,可以创建对象。对于抽 象类,虽然不能创建对象,但是可以定义类的引用型变量。在 java 语言中还有另一种数据 类型,它比抽象类还抽象,这就是接口。 接口构造. 接口由一组抽象方法构成。在设计一个接口时需要指出接口中每个方法的结果类型, 方法名,形参表,这些信息都出现在接口定义中。同时还要指出每个方法的功能。方法的 功能是用自然语言描述的,当然不能出现在接口的形式定义中,但是这些功能是接口的一 部分,是一种约定(contract),所有实现和使用接口的人都必须遵守的约定。 接口与类的比较. 类有域(数据成员)和方法(成员函数) ,在类的外部可以访问的域和方法构成类的约 定,它是类的设计者承诺要完成的工作。一个具体类实现了类的全部约定,而一个抽象类 只实现了部分约定。接口也规定了一种约定,但是它完全没有实现这个约定。从这个意义 上说,接口是完全没有实现的,最抽象的类。 接口定义语法. 接口修饰符 interface 接口名 extends 接口1,接口n 接口体 这里 接口修饰符是public和abstract之一。public修饰符表示该接口可以被任何人使用。 abstract修饰符已经被废弃,因为所有接口都隐含地被定义成abstract 。如果没有接口修饰 符,表示该接口是包可访问的。 Interface是java保留字,指示正在定义一个接口。 接口名是一个标识符。 extends 接口 1,接口n 是任选的,表示正在定义的接口继承了接口1,接 口n,这些接口称为新定义接口的超接口,新定义的接口称为每个超接口的子接口。新定 义的接口包含超接口的所有方法。java只支持类的单继承,但是支持接口的多继承。所有 的类有一个祖先类Object,但是接口没有一个所有接口的共同祖先。 接口体含有域和方法。 1. 所有的域都隐含地定义为public,static,final 的,因此不建议使用这些修饰符。 2. 所有方法都隐含地定义为public,abstract 的。因此也不建议使用这些修饰符。 例1.这个例子只是从语法上介绍接口及接口的继承。 interface Mysuper void f (); Object g (); interface Mysub extends Mysuper void h(); 定义Mysuper是一个有两个抽象方法的接口。 Mysub是一个继承自Mysuper的接口, 它自身定义了一个方法h,从Mysuper继承了方法f和g,所以 Mysub有3个方法。所有的方 法都是public,abstract。由于接口定义没有访问修饰符,因此接口是包可访问的。 接口实现. 接口是在定义类时实现的。具体语法如下: 类修饰符 class 类名 extends 基类名 implements 接口 1 , 接口 n 类体 以上是类定义的完整语法,含义是:定义一个名字为“类名”的类,它继承自“基类 名”,并且实现了接口 1, 接口 n。所谓实现了某接口,指的是它的类体包含接口中所 有方法的实现。如果类只是部分实现了接口中的方法,那么这个类就是抽象类,类修饰符 中必须含有 abstract,否则编译出错。 接口的使用. 先看一个例子. interface 剧场 void 显示节目单(); void 演出(); interface 茶馆 void 显示茶叶种类(); void 售茶(); class X implements 剧场,茶馆 显然 X 是带演出的茶馆类?它既可以看成茶馆,也可以看成剧场。 X p=new X(); p 指向一个带演出的茶馆。 剧场 q=p; q 指向 一个带剧团。使用 r 只能访问剧团接口的方法。 茶馆 r=p; r 指向一个茶馆。使用 r 只能访问茶馆接口的方法。 一般情况下,给定类定义并创建对象 class Sub extends Super implements K1,K2 。 Sub X=new Sub(); 根据以前的知识,可以说 X 引用的对象是 Sub 类型的,也可以说这个对象是 Sup 类 型的。因为接口是数据类型,因此也可以说:X 引用的对象是 K1 类型的也是 K2 类型的。 定义接口类型的变量接口是数据类型,因此可以定义接口类型的变量,该变量是引 用类型的。但是不能定义接口类型的对象,因为接口是抽象的。 对象的引用对于任何实现了接口 K 的类 C,接口类型 K 的变量都可以引用 C 类型的对 象。 例假设有类定义和变量定义 class C1 implements K class C2 implements K C1 x=new C1(); C2 y=new C2(); K ref; 不妨假设 C1 和 C2 是为不同目的而设计的两个类。那么赋值 ref=x 和 ref=y 都是合法 的。 2.5.2 接口应用举例 在Java的SDK中存在名为Collection接口,单词Collection的含义是“收集在一起的一 堆东西” ,用在Java的SDK中译为“集群” 。 所谓集群就是一个广义的集合,允许同一个 元素多次出现。Collection接口是各类“集群”上所有接口的根。Collection有一个子接口 List,它实际表示的是线性表。 本节介绍 MyCollection 接口,它的一个子接口 MyList。分别是接口 Collection 和 List 的简化。 interface MyCollection /add执行结束后,保证该集群中含有obj。真加入,返回 true。 boolean add(Object obj); /从当前集群中删除元素obj。真删除,返回true。 boolean remove(Object obj); /返回一个此集群所有元素上的一个迭代器。 Iterator iterator(); add向集群插入元素,但是没有指出插入位置。remove 从集群删除指定元素。方法 iterator返回一个迭代器 (Iterator),它用于遍历整个集群。显然迭代器与集群的具体 实现密切相关,因此Iterator也是一个接口。 interface MyList extends MyCollection /新方法 .插入指定的元素到list中, 使其成第index 个元素。 void add(int index, Object element); / 新方法 .删除当前list第index个元素。 Object remove(int index); 接口MyList继承自MyCollection 。表示一个有序的集群,这个接口的用户可以精确控 制每个元素的插入位置。用户可以通过整数下标(在list中的位置)访问list中的元素,并能通 过下标检索位于list中的元素。 这个接口继承了MyCollection中的add方法,但是对其功能做了进一步的限制,要 求新元素插入到表尾。同样也继承了方法remove,但保持这个方法在父接口的约定。同 时,MyList接口新增加了新方法add(int index, Object element)和 Object remove(int index) ,功能是插入新元素到index处和删除当前list第index个元素。 Iterator(迭代器)本身也是一个接口,定义如下 interface Iterator boolean hasNext();/返回true如果还有下一个元素。 Object next();/返回迭代过程中的下一个元素, void remove();/从当前集群中删除最后一次调用next 方法 /时返回的元素,每调用一次next方法, /至多调用一次remove 方法。 这些接口的实现将在局部类一节介绍。下面是一个使用 ArrayList 的简单例子。 public class Test public static void main(String args) String s; ArrayList a=new ArrayList();/创建一个list a.add(“abcd“); a.add(“efgh“); a.add(“ijkl“); a.add(“uvw“); a.add(2, “1234“); Iterator iter=a.iterator(); while(iter.hasNext() s=(String)iter.next(); System.out.println(s); 输出是: abcd efgh 1234 ijkl uvw 以下是 MyList 的实现,除去最后的 iteratort 方法之外都很简单。Iterator 方法的实现需要 用到局部类的知识,下一节讲解。 ArrayList 类是 MyList 接口的数组实现。 class ArrayList implements MyList private Object list; private int count; public ArrayList()count=0;list=new Object4; public ArrayList(int l)count=0;list=new Objectl; private void enlarge()/当 list 填满时,容量自动扩大一倍。 Object l=new Object2*list.length; for(int i=0;i=index;i-)listi+1=listi; listindex=element; /新方法.删除当前 list 第 index 个元素。 public Object remove(int index) return null; /未实现 /返回一个此 List 所有元素上的一个 Iterator 迭代器。 public Iterator iterator() /局部类定义开始 class Iter implements Iterator int pos;/数组 list 的下标。 Iter()pos=0;/局部类构造函数 /返回 true 如果还有下一个元素。 public boolean hasNext() return poscount; /返回迭代过程中的下一个元素 public Object next() return listpos+; /从当前集群中删除最后一次调用 next 方法时返回的元素, /每调用一次 next 方法,至多调用一次 remove 方法。 public void remove() for(int j=pos-1;jcount-1;j+)listj=listj+1; count-; /局部类定义结束 Iter iter=new Iter(); return iter; public class class_main public static void main(String args) student g=new studentnew student(1,“aaa“),new student(2,“bbb“),new student(3,“ccc“); student s; ArrayList a=new ArrayList(); a.add(g0); a.add(g1); a.add(g2); Iterator it=a.iterator(); while(it.hasNext() s=(student)it.next(); System.out.println(s.getid()+“ “+s.getname(); a.remove(new student(1,“bbb“); it=a.iterator();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年火电运行基础知识及初级值班员考试要点详解
- 胃肠外科病人护理培训
- 甲状腺结节科普课件
- 一件好事 教学课件
- 医学教学课件模板
- 江苏南通2020-2024年中考满分作文74篇
- 临床护理教学课件
- 低碳节能教学课件
- 新解读《GB-T 23339-2018内燃机 曲轴 技术条件》
- 生鲜柜安全知识培训内容课件
- 第10章 呼吸系统疾病患儿的护理课件
- (正式版)SHT 3551-2024 石油化工仪表工程施工及验收规范
- 离子反应课件
- 半导体产业链中的供应链管理与优化
- 联合国经济、社会与文化权利的国际公约
- 混凝土强度评定表(自动计算)
- 北师大版(2019)高中英语选择性必修第二册必背单词表汇编
- 《标书制作流程培训》课件
- 哺乳期乳房内化脓培训演示课件
- 六国化工实习报告
- 医院工作制度 与人员岗位职责
评论
0/150
提交评论