`
senton
  • 浏览: 206610 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

理解接口

    博客分类:
  • J2SE
阅读更多
 
理解接口

 

 

好的面向对象编程要求类设计人员隐藏那些不需要类的使用人员了解的信息。对于 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方法将永远不能工作。

分享到:
评论

相关推荐

    理解接口interface,j简单的一个demo

    在“理解接口interface,简单的一个demo”这个主题中,我们将深入探讨接口的基本用法以及如何在实际编程中应用。通过定义并实现多个接口,我们可以看到接口如何为不同类提供通用的行为模板,而各个类可以根据自己的...

    InterfaceTest.java 这段代码用于理解接口静态、默认(可重写)、接口中的方法、多实现、多继承知识点

    这段代码用于学习接口时,更加深刻理解接口静态、默认(可重写)、接口中的方法、多实现、多继承等知识点。

    第三方接口对接标准化接口文档

    第三方接口对接标准化接口文档 本文档旨在规范化第三方接口对接的标准化接口文档,确保接口调用的一致性和可靠性。...通过本文档,开发者可以更好地理解接口的调用方式和数据交换格式,从而提高开发效率和质量。

    Vivado进阶之理解接口管理

    在Vivado进阶设计中,理解接口管理是至关重要的,特别是当涉及到将C程序转换为RTL(寄存器传输级)代码时。接口管理简化了数据交互,并且能够有效地处理块RAM的读写操作。本文将深入探讨Vivado中的接口综合以及手动...

    java 接口练习作业

    在解决这些练习时,你需要理解接口的用途、实现方式,以及如何在实际场景中应用接口,如集合框架。同时,熟悉和掌握Java集合框架的各种操作,将对你的编程能力提升大有裨益。通过实践,你将更深入地理解Java的面向...

    c#接口的意义 学习心得 读书笔记 (彻底弄清楚接口,轻松使用接口)

    c#接口的意义是学习c#语言的重要部分,对于初学者来说,理解接口的概念和应用是非常重要的。本文将详细介绍c#接口的定义、特点、优点和实践经验,帮助读者更好地理解和使用接口。 一、什么是接口 在c#语言中,接口...

    比较好的接口设计说明书模板

    术语解释将有助于读者更好地理解接口的设计和实现。 四、参考资料 在设计接口时,需要列出有关的参考资料,例如相关的标准、协议、文档等。这些参考资料将有助于开发者更好地理解接口的设计和实现。 五、设计思想...

    东北大学接口实验报告.zip

    东北大学的接口技术实验可能涵盖了以上这些方面,通过实践让学生深入理解接口设计的重要性,以及如何创建、测试和维护接口。通过这样的实验,学生将具备解决实际问题的能力,为未来的IT职业生涯打下坚实基础。

    接口文档模板.doc

    这里通常会有一个接口列表,包括接口的索引、功能和调用频率,以便快速定位和理解接口。 4. **接口描述**: - 每个接口都应有清晰的描述,如1.1.1部分所示,包含接口编号、功能概述、使用场景、调用频度和版本信息...

    接口课件(上课专用)

    本课件“接口课件(上课专用)”显然是为了教授这个关键概念而设计的,其目标是用简洁明了的方式帮助学习者理解接口的原理和应用。 接口可以分为多种类型,包括应用程序编程接口(API)、图形用户界面(GUI)、系统...

    接口技术模拟试卷题集

    首先,我们需要理解接口的基本概念。在编程中,接口可以被视为一种合同或规范,它定义了类或模块之间交互的特定方式。这些交互可能包括函数调用、数据交换或其他通信形式。接口不包含实现,只规定了必须遵循的规则。...

    1.接口文档_接口文档_

    1. **接口说明**:简述接口的目的、功能和适用范围,帮助读者快速理解接口的作用。 2. **接口URL**:定义了客户端如何访问服务,包括协议(如HTTP、HTTPS)、域名、路径等。 3. **请求方法**:常见的有GET、POST、...

    西农接口实验(代码+实验报告)

    实验可能涉及创建自定义接口,理解接口与类的关系,以及如何通过实现接口来确保多态性。 2. **设计原则** 实验可能涵盖了设计模式中的接口隔离原则(ISP)和依赖倒置原则(DIP),前者强调接口应尽可能小且专用,后者...

    海康平台Http接口帮助文档+示例

    通过SDK,开发者可以快速理解接口的使用方式,减少开发时间和复杂性,确保与海康平台的兼容性和稳定性。 6. **版本差异**:iVMS-8700_V2.9.1和iVMS-5000_V6.9可能在功能、性能和API上有所区别,开发者需要根据实际...

    API接口模板word/Excel

    API接口模板是软件开发中非常重要的工具,它们用于规范和标准化接口设计,使得开发者能够高效地编写和理解接口文档。Word和Excel版本的API接口模板各有其特点和适用场景。 在Word版本的API接口模板中,通常会包含...

    T100 Web Service 接口开发v1.5版.rar

    这些信息对于理解接口的工作原理和开发流程至关重要。 在压缩包中的JSON文件,如“接口2 axmt540 寄销仓出货.json”和“回传 模板.json”,可能包含了一些示例数据或模板,展示了接口实际操作时的数据格式和结构。...

    C++ Genesis2000接口

    它是学习和理解接口使用的关键资源。 总的来说,C++ Genesis2000接口为开发者提供了一条通往高效、定制化的解决方案的道路,允许他们利用Genesis2000的强大功能,构建出满足特定需求的应用程序。理解并熟练掌握这个...

    接口需求文档模板.rar

    5. **接口流程图**:通过图表展示接口的工作流程,直观理解接口的运作机制。 6. **错误处理**:详细列出可能出现的错误情况及对应的处理方式,以确保系统稳定运行。 7. **安全考虑**:讨论接口的安全措施,如认证...

    软件接口的哲学思考与开发实例

    首先,我们需要理解接口的本质。接口,简单来说,就是一种规定或者约定,它定义了不同组件之间如何进行通信。接口可以分为内部接口(内接口)和外部接口(外接口)。内接口通常用于封装模块内部的实现细节,对外部...

    工作接口文档示例,内包括html、word、excel等多种形式

    它支持链接、样式和结构化布局,方便开发者快速查找和理解接口信息。例如,可以使用HTML创建一个带有目录、跳转链接和搜索功能的详细接口文档,使得团队成员能高效地查阅和使用。 2. **Word接口文档**: Microsoft...

Global site tag (gtag.js) - Google Analytics