Java中的接口

原创 2010年06月01日 20:44:00

  1.  在Java中,一个类只能够有一个直接的父类,但是一个类可以实现多个接口,Java采用这种方式实现多继承;

  2. 接口的概念:

      a.接口明确地描述了系统对外提供的所有服务,清晰地把系统的实现细节与接口分离,系统的实现细节由接口的实现类负责实现,接口负责对外描述系统提供的服务,对内描述系统应该具备的功能;

      b.接口和抽象类都不能够被实例化,但是抽象类中可以包含具体的实现,这样可以提高代码的重用性,而接口不能包含任何具体的实现;

  3.接口的特点

     (1)接口中的成员变量必须全部是public,static,final类型(编译时常量),必须被显式地初始化;

     (2)接口中的方法必须全部是public,abstract类型;

             综合(1)(2)两点,接口中不能够出现:

              A.实例变量(因为对象中只保存实例变量,而接口不能够有实例,因此没有实例变量)

              B.非抽象的实例方法

              C.静态方法

     (3)接口中没有构造方法,因为不能够创建接口的实例对象;

     (4)一个接口不能够实现另外一个接口,只能够继承另外多个接口(类可以实现多个接口,接口可以继承多个接口),如果接口C同时继承接口A和B,则接口C成为符合接口;

     (5)接口必须通过类实现它的抽象方法,当类实现某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类

     (6)不能够创建接口的实例,但可以创建接口类型的引用变量,该变量可以引用实现这个接口的类的实例

    4.抽象类vs接口

      4.1  相同点

      (1)抽象类和接口都位于继承树的上层;

              这里有一个设计思想:当一个系统(一个类)使用一棵继承树上的类时,应该尽可能地把引用变量声明为继承树的上层抽象类型,引用变量最好声明为接口类型,因为接口是作为系统和外界的交互窗口,这样的好处是可以实现两个系统之间的松耦合;

      (2)抽象类和接口都不能够被实例化;

      (3)抽象类和接口都可以包含抽象方法;

      4.2 不同点

      (1)抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现这些方法,提高代码的可重用性,而接口中只能够定义抽象的方法

      这里有一个扩展性的问题,抽象类比较容易被扩展,因为可以在抽象类中加入具体的方法,加入具体的方法并不会影响到它的任何子类,子类默默继承了这些方法,而对于接口而言,一旦接口被公布,就不能随意在接口中添加方法,因为这样,实现接口的类需要实现新加入的方法,否则需要将类定义为抽象类

      (2)一个类只能够继承一个直接的父类,这个父类有可能是抽象类,但是一个类可以实现多个接口

          原理思想:接口中只有抽象方法,只有接口的实现类会实现接口的抽象方法,一个类即使有多个接口,也不会增加JVM进行动态绑定的复杂度,因为JVM不会把方法与接口绑定,只会把方法和实现类绑定。

       (3)Java程序的设计思想:::

        对于一棵已经存在的继承树,可以方便地从类中抽象出新的接口,接口更有利于软件系统的维护和重构,对于一棵继承树而言,如果B继承A,B和C提供一种相同的服务s,这样如果将B和C共同的服务抽象成为抽象类O,因为Java不允许多继承,需要A继承类O,这样A就需要实现O中定义的服务s,否则需要将A定义成为抽象类,这显然是不合理的。

        因此这时需要接口,将服务s抽象出来封到一个接口中,让B和C都实现这个接口,这样不会影响到其他类

       (4)一种解决方案是:

        对已经存在的系统进行自下而上的抽象时,需要借助于接口,对于任何两个类,不管他们的类型是否相同,只要他们存在相同的功能,提供相同的服务,就可以将这个服务抽象出来,封装到一个接口中,让这两个类都实现这个接口,这样,这两个类都是这个接口类型了。

       (5)一种Java程序的设计原则是:

        系统之间的耦合都通过接口实现,即将引用变量定义成为接口类型,这样可以保证系统之间的松耦合(继承树的上层抽象类型)

     4.3 何时使用抽象类??何时使用接口??

        (1)将接口作为系统与外界交互的窗口,对外,接口向使用者说明系统能够提供的服务,对内,接口指定系统必须实现的服务,

    下面这句话很重要::

        接口是一个系统中最高层次的抽象类型,这里的系统可以是一个很大的系统,也可以是一个局部系统,任何系统之间,都应该通过接口进行交互,这样可以实现系统之间的松耦合。

        (2)外界只能够通过接口访问系统提供的服务,而不能够修改接口,接口一旦定义,不要轻易修改,否则对外对内都会造成很大的影响。

         (3)抽象类可以作为系统的扩展点,将抽象类视为介于“抽象”和“实现”之间的半成品,它力所能及地完成了部分工程能,还有一些功能有待于它的子类去实现。

           例如一个系统A中包括接口i和抽象类1,系统B中包括四个类abcd,系统B中的类通过与接口i建立组合和依赖关系,访问系统A中的服务,通过继承系统A中的抽象类1,扩展系统A的功能

          当一个软件系统对外发布时,会在文档中说明哪些接口允许使用者实现,哪些类允许被继承;

 

          时刻牢记,系统之间通过接口进行耦合,访问系统提供的服务,通过继承抽象类实现系统功能的扩展      

Java核心技术 第一章 接口、继承与多态

-
  • 1970年01月01日 08:00

java中的接口懂多少

接口很多人都会写,也明白它用在什么地方,会产生哪些效果。特别是很多人一提到接口,就脱口而出规范、设计模式,那么对于接口又了解多少呢?本章试着从java中接口的定义和使用出发,谈谈java中接口具有哪些...
  • qq_26971305
  • qq_26971305
  • 2017-05-08 13:58:59
  • 1756

java 的接口到底起什么作用

        我想,可能不止我一个人有这个疑问,所以,把它贴出来。   下面是madai和clkrst给我的回答。   在此谢谢两位。   我的问题是:   java 的接口到底起什么作用?    ...
  • beiai1014
  • beiai1014
  • 2007-04-12 11:34:00
  • 34462

什么是java 接口,用处是什么

关于学习到java ,很多人可能接触到接口,但并不理解接口的用处,其实接口很简单,其作用有两个 1 泛化      下面请看代码   public void  feed(Chicken chike...
  • huangjunjie1991
  • huangjunjie1991
  • 2017-05-02 13:39:16
  • 3226

Java的接口

定义Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)...
  • jdsjlzx
  • jdsjlzx
  • 2016-07-20 23:39:28
  • 2376

Java接口 详解(二)

上一篇Java接口 详解(一)讲到了接口的基本概念、接口的使用和接口的实际应用(标准定义)。我们接着来讲。一、接口的应用—工厂设计模式(Factory)我们先看一个范例:package com.wz....
  • wei_zhi
  • wei_zhi
  • 2016-10-06 12:16:01
  • 2509

Java中的接口

接口与类的区别:接口不能用于实例化对象。接口没有构造方法。接口中所有的方法必须是抽象方法。接口不能包含成员变量,除了 static 和 final 变量。接口不是被类继承了,而是要被类实现。接口支持多...
  • qq_41985556
  • qq_41985556
  • 2018-04-17 16:14:57
  • 5

Java 中的接口有什么作用?

Java 中的接口有什么作用? 例如我定义了一个接口,但是我在继承这个接口的类中还要写接口的实现方法,那我不如直接就在这个类中写实现方法岂不是更便捷,还省去了定义接口?接口在java中的作用是什么?...
  • weixin_41804194
  • weixin_41804194
  • 2018-03-10 11:06:29
  • 57

java中接口的作用是什么?

我想,可能不止我一个人有这个疑问,所以,把它贴出来。     下面是madai和clkrst给我的回答。     在此谢谢两位。     我的问题是:   ...
  • kongjiea
  • kongjiea
  • 2015-11-19 11:47:44
  • 2992

java中接口有什么作用?

接口的作用就是把使用接口的人和实现接口的人分开,实现接口的人不必要关心谁去使用,而使用接口的人也不用关心谁实现的接口,由接口将他们联系在一起。以上像一段绕口令,那么通过下面的几段程序解释: ...
  • rongwenbin
  • rongwenbin
  • 2014-10-20 17:00:35
  • 1014
收藏助手
不良信息举报
您举报文章:Java中的接口
举报原因:
原因补充:

(最多只允许输入30个字)