`
student_lp
  • 浏览: 428863 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

   如果可以动态的将一个构件移走,并以另一个构件取代之,那么这种构件就是可插入构件。接口是实现构件的可插入性的关键。

一、什么是接口

       一个java接口是一些方法特征的集合,这些方法特征当然来自于具体方法,但是他们一般都是来自于一些在系统中不断出现的方法。一个接口只有方法的特征,而没有方法的实现,这些方法在不同的地方被实现,可以具有完全不同的行为。

      在人们讲到“接口”的时候,这个词往往有两种不同的含义:第一种是指java接口,这是一种java语言中存在的结构,有特定的语法和结构;另一种仅仅是指一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做java接口,后者就叫做接口。

     在java中一个方法的特征仅包括方法的名字、参量的数目和种类,而不包括方法的返回值类型、参量的名字以及所抛出的异常。在java编译器检查方法的重载(Overload)时,会根据这些条件判断两个方法是否是重载方法。但是在java编译器检查方法的置换(Override)是,则会进一步检查两个方法的返回类型和抛出的异常是否相等。

    一个java接口的方法只能是抽象的和公开的,java接口不能有构造函数,并且接口可以有public、静态的和final的属性;接口中还可以定义一些常量。

    接口和类的最重要区别是,接口仅仅描述方法的特征,而不给出方法的实现;而类不仅给出方法的特征,而且给出方法的实现。因此,接口把方法的特征和方法的实现分隔开来。这种分隔,体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色可以由不同的演员来演,而不同的演员之间除了扮演一个共同的角色之外,并不要求有任何其他的共同之处。

二、为什么要用接口

      一个对象需要知道其他一些对象,并与其他的对象发生相互作用,这是由于这些对象需要借助其他对象以便实现一项功能。如果对象在引用其他对象的时候,直接引用的是其他具体的对象,那么在以后的升级修改过程中,这些引用具体的对象可替代性几乎为零,也就是可插入性几乎为零。

     那么基于基类的继承是否可以提供一些帮助呢?我们在使用过程中通过抽象超类声明(声明出子类要提供的行为),然后有不同的子类继承自这个超类并以不同的方式实现了这个超类所声明的行为。客户端可以动态的决定使用哪个具体子类,这是否可以提供可插入行呢?

    这确实可以在简单的情况下提供可插入性。但是由于java是单继承的。因此,在很多情况下,这个具体类可能已经有了一个超类,这时候,再给他加上一个新的超类是不可能的。如果非要实现的话,就只能把这个新的超类添加到已有的超类上面,形成超类的超类。这样一来,对于一个具体类的可插入性设计,很容易形成这个等级结构中的所有类的修改。更糟糕的是,如果上面的超类不能进行修改,这样我们的整个设想就无法实现了。

     通过上面的讨论,我们就能清楚的看到,没有接口,可插入性就没有保证。

     在一个类等级结构中的任何一个类都可以实现一个接口,这个接口会影响到此类的所有子类,但是不会影响到此类的任何超类。此类将不得不实现这个接口所规定的方法,而其子类则可以从此类自动继承到这些方法,当然也可以选择置换掉所有的这些方法,或者其中的某一些方法。这时候,这些子类就具有了可插入性。

     ① 关联的可插入性

     正如前面所说的,一个对象需要完成一项任务,就需要知道其他的对象,并且调用其他对象的方法。这个对象对其他对象的知识叫做关联。

     如果一个关联不是针对一个具体类的,而是针对一个接口的,那么任何实现这个接口的类都可以满足要求。换言之,当前对象并不在意所关联的是哪一个具体类,而仅仅关心这个类是否实现了某个接口。这样一来,就可以动态的将这个关联从一个具体类转到另一个具体类,而这样做的唯一条件是他们都实现了某个接口。

     ②调用的可插入性

     同样,一个对象不可避免的需要调用其他对象的方法。这种调用不一定非得是某一个具体类,而可以是一个接口。这样一来,任何实现了这个接口的具体类都可以被当前对象调用;而当前对象到底调用的是哪一个具体类的实例则完全可以动态的决定。

     因此,接口提供了关联以及方法调用上的可插入性。软件系统的规模越大,生命周期越长,接口的重要性就越大。接口使得软件系统在灵活性和可扩展性、可插入性方面得到保证。

三、工程中的应用

    设计师应当使用java接口和抽象java类将软件单位的内部和外部耦合起来。换言之,应当使用java接口和抽象类而不是具体类进行变量的声明、参数的类型声明,以及数据类型的转换等。当然,一个更好的做法是仅仅使用java接口,而不是使用抽象java类来做到上面这些。

 

 

本文通过总结《java与模式》而来。

分享到:
评论

相关推荐

    java经典面试题目-面经-java-Java语言的进阶概念-常用的库和框架-并发编程-网络编程-Web开发-面经

    什么是Java中的面向对象编程(OOP)?列举OOP的原则。 什么是Java中的重载和重写?它们之间有什么区别? 什么是Java中的静态方法和实例方法?它们之间有什么区别? Java中如何实现字符串的连接? 什么是Java中的...

    针对接口编程 java示例

    针对接口编程,实现设计模式的鸭子模式,代码有很好的灵活性,并可进行好的封装

    Java SE编程入门教程 java接口(共21页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java设计模式(共17页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    java源码包---java 源码 大量 实例

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    Java SE编程入门教程 java泛型(共11页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java判断循环(共79页).ppt

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java序列化(共14页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    Java Web编程宝典-十年典藏版.pdf 是PDF电子书,不是源码。共分2个包。 《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。...

    JAVA编程模式与范例

    《Java编程模式与范例》分为基础部分和高级部分两册。本书为高级编程模式与范例,总共分为6种模式,近200个范例,内容涉及:修饰符、访问控制与类设计的模式与范例;软件包、软件接口与异常处理的模式与范例等。

    Java SE编程入门教程 java网络编程(共29页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 javaGUI编程快速入门(1)(共82页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java instanceof(共3页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java object(共9页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java异常(共57页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java GC(共6页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java正则(共8页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java IO(共28页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java数组(共33页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

    Java SE编程入门教程 java线程(共61页).pptx

    Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断...

Global site tag (gtag.js) - Google Analytics