好的面向对象编程要求类设计人员隐藏那些不需要类的使用人员了解的信息。对于 Java 编程语言,这样的访问可以通过使用关键字 private, protected, 和 public来控制。这些关键字控制类内部的变量和方法是否可见,但是不好的类设计导致太多的可见信息和方法没有被很好的封装。
封装的一种方式是通过使用接口(Interface)实现的。接口提供一种途径,使类隐藏其处理的特定事物的细节,仅对外公布它必须支持的属性。对于编程所涉及的,你可以修改类的实现,而不修改它的调用,因为属性本身没有改变,修改的仅仅是类的实现。
一个接口被经常用得到的地方是Collection Framework。这个框架定义了一组非常重要的接口,它们是由一组多个类实现的。通过仅仅研究主要的接口,你可以有效的掌握整个框架,因为特别的实现类一般不影响设计的整体。
例如,List接口定义了一个有序的元素集合。可用地实现包括ArrayList和LinkedList,它们都实现了List接口。当你的程序需要处理List时,不必考虑它是ArrayList还是LinkedList,只要知道所选用的类的属性即可。这个属性就是接口。
通过实现类的接口,并且在类设计时仅对外公布接口,你就有效的封装了类的定义,这样后台实现的变动将对系统其它部分的影响最小。
以ArrayList和LinkedList为例。将ArrayList看作一个可增长的数组对象(指是存储对象,而不是原始数据)。当类实现了List的全部接口时,它的特性在特定条件下是可以优化的。
例如,如果你的程序是要队列表中的数据进行频繁的随机访问,(例如,显示第3,12,2,和25项数据)ArrayList类提供对列表中每一个数据快速查询。快速查询是以在列表中间添加和删除数据的速度为代价的。如果后一种行为是你需要的,那么LinkedList类是一个好的选择。它提供快速的顺序访问、添加和删除,但是,代价是慢速随机查询。
在处理ArrayList和LinkedList时,有两种方式创建对象:
List cityList = new ArrayList() ;
LinkedList peopleList = new LinkedList() ;
两个代码段都是正确的,但是这两行代码之间存在的显著的差别。第一行表示我们要创建一个ArrayList,但是我们只需要把它作为一个List来访问。第二行正好相反。是,LinkedList项目被创建了,ArrayList也一样。但是,声明部分说明它只能作为LinkedList来访问,这就数它的最大区别。
理解接口真正变的重要是在这两行代码的用户确定“查询项目n”比在位置m处删除(或添加)项目更为重要时。
PeopleList变量被声明为LinkedList类型。这不是它本身的问题,因为你研究的更深层次的内容,你将发现peopleList在任何地方都被作为LinkedList对象处理。在你对peopleList使用LinkedList特有的方法的同时,如果你想把它作为ArrayList来处理,将会出现问题。
List peopleList = new ArrayList() ;
通过学习仅使用接口来处理任何对象,你将发现在设计完成之后修改实现,你需要修改的仅仅是声明部分,除此之外,没有任何代码改动。这就是接口的绝妙之处。因为类的最初声明是LinkedList,当类型变为List时意味着象addFirst或addLast这样的方法是无效的,因为新的peopleList的类型是List,它没有这些方法。
这种基于接口设计的代码,就像Collection Framework所向大家承诺的那样,任何人编写的代码是以循环构造方式进行的,而无需知道使用的是哪个Collection。创建的类是被限制为提供接口的完全实现。除此之外,新代码将不能被编译。
作为实例,下面的程序创建一组集合。每个集合提供一个系统定义的Iterator这样集合的每个元素可以被访问。这个iterator将被传递到帮助例程,在这里集合的独立元素将被打印。
import java.util.*; public class Interfaces { public static void main(String args[]) { Properties props = System.getProperties(); Set keySet = props.keySet(); dumpIterator(keySet.iterator()); List list = Arrays.asList(args); dumpIterator(list.iterator()); } private static void dumpIterator(Iterator itor) { // System.out.println(itor.getClass().getName()); while (itor.hasNext()) { System.out.println(">> " + itor.next()); } System.out.println("----"); } }
类Iterator的类型是unknown,这正是接口的绝妙之处,而不是问题。真正的事实是iterator方法返回的是一个真实的Iterator对象。然而,dumpIterator通常提供接口的完全实现。
如果你去掉dumpIterator中的println行的注释,你将发现真实的iterator类名,对Properties是Hashtable.Enumerator而List是AbstractList.Itr。这个事实不必知道,也不会对你的程序有任何帮助。真正重要的是List和Properties的iterator方法所返回的任何对象,必须实现java.util.Iterator:hasNext, next和remove方法。没有这三种方法中任何两种,dumpIterator方法将永远不能工作。
|
相关推荐
这段代码用于学习接口时,更加深刻理解接口静态、默认(可重写)、接口中的方法、多实现、多继承等知识点。
在教学中,"接口(东南大学)"可能是一个课程或教材的主题,涵盖了上述内容,并可能结合实际案例和实验,让学生深入理解接口的工作原理和设计方法。通过学习这部分知识,学生能够具备解决计算机系统中硬件和软件相互...
在解决这些练习时,你需要理解接口的用途、实现方式,以及如何在实际场景中应用接口,如集合框架。同时,熟悉和掌握Java集合框架的各种操作,将对你的编程能力提升大有裨益。通过实践,你将更深入地理解Java的面向...
术语解释将有助于读者更好地理解接口的设计和实现。 四、参考资料 在设计接口时,需要列出有关的参考资料,例如相关的标准、协议、文档等。这些参考资料将有助于开发者更好地理解接口的设计和实现。 五、设计思想...
东北大学的接口技术实验可能涵盖了以上这些方面,通过实践让学生深入理解接口设计的重要性,以及如何创建、测试和维护接口。通过这样的实验,学生将具备解决实际问题的能力,为未来的IT职业生涯打下坚实基础。
这里通常会有一个接口列表,包括接口的索引、功能和调用频率,以便快速定位和理解接口。 4. **接口描述**: - 每个接口都应有清晰的描述,如1.1.1部分所示,包含接口编号、功能概述、使用场景、调用频度和版本信息...
首先,我们需要理解接口的基本概念。在编程中,接口可以被视为一种合同或规范,它定义了类或模块之间交互的特定方式。这些交互可能包括函数调用、数据交换或其他通信形式。接口不包含实现,只规定了必须遵循的规则。...
实验可能涉及创建自定义接口,理解接口与类的关系,以及如何通过实现接口来确保多态性。 2. **设计原则** 实验可能涵盖了设计模式中的接口隔离原则(ISP)和依赖倒置原则(DIP),前者强调接口应尽可能小且专用,后者...
8. **参考信息**:列出相关规范、标准和依赖关系,便于理解接口设计的背景。 通过以上内容,我们可以看出,接口管理是软件开发中的重要组成部分,良好的接口管理能有效提升项目质量和效率。所提供的文档模版则为...
通过SDK,开发者可以快速理解接口的使用方式,减少开发时间和复杂性,确保与海康平台的兼容性和稳定性。 6. **版本差异**:iVMS-8700_V2.9.1和iVMS-5000_V6.9可能在功能、性能和API上有所区别,开发者需要根据实际...
通过学习“河北科技大学接口课件”,学生不仅可以掌握接口的基本概念和用法,还能理解接口在实际项目中的作用,提升其编程能力和软件设计水平。对于有志于深入IT行业的学习者来说,理解和熟练使用接口是必不可少的...
API接口模板是软件开发中非常重要的工具,它们用于规范和标准化接口设计,使得开发者能够高效地编写和理解接口文档。Word和Excel版本的API接口模板各有其特点和适用场景。 在Word版本的API接口模板中,通常会包含...
5. **接口流程图**:通过图表展示接口的工作流程,直观理解接口的运作机制。 6. **错误处理**:详细列出可能出现的错误情况及对应的处理方式,以确保系统稳定运行。 7. **安全考虑**:讨论接口的安全措施,如认证...
这些信息对于理解接口的工作原理和开发流程至关重要。 在压缩包中的JSON文件,如“接口2 axmt540 寄销仓出货.json”和“回传 模板.json”,可能包含了一些示例数据或模板,展示了接口实际操作时的数据格式和结构。...
首先,我们需要理解接口的本质。接口,简单来说,就是一种规定或者约定,它定义了不同组件之间如何进行通信。接口可以分为内部接口(内接口)和外部接口(外接口)。内接口通常用于封装模块内部的实现细节,对外部...
它是学习和理解接口使用的关键资源。 总的来说,C++ Genesis2000接口为开发者提供了一条通往高效、定制化的解决方案的道路,允许他们利用Genesis2000的强大功能,构建出满足特定需求的应用程序。理解并熟练掌握这个...
它支持链接、样式和结构化布局,方便开发者快速查找和理解接口信息。例如,可以使用HTML创建一个带有目录、跳转链接和搜索功能的详细接口文档,使得团队成员能高效地查阅和使用。 2. **Word接口文档**: Microsoft...
本课程设计的目标是通过汇编语言编程,让学生深入理解接口工作原理,并实际操作实现电子琴的功能。 首先,硬件接口是指电子琴内部电路与外部设备(如键盘、扬声器、电源等)之间的连接。在这个设计中,可能涉及到...
这些术语是理解接口规范的关键。 在交易流程中,定义了多种交易流程,例如持卡就医流程、电子凭证线下使用流程、电子凭证线上支付流程、电子凭证线上退款流程、门诊(大病)挂号登记流程、住院(急观家床)登记流程...