zoukankan      html  css  js  c++  java
  • 转:Java接口学习笔记

    一、Java接口基础知识

    1, Java语言不支持一个类有多个直接的父类(多继承),但可以实现(implements)多个接口,间接的实现了多继承.

    2, 与Java接口相关的设计模式:

    1, 定制服务模式

    设计精粒度的接口,每个Java接口代表相关的一组服务,通过继承来创建复合接口

    2, 适配器模式

    当每个系统之间接口不匹配时,用适配器来转换接口

    3, 默认适配器模式

    为接口提供简单的默认实现

    4, 代理模式

    为Java接口的实现类创建代理类,使用者通过代理来获得实现类的服务

    5, 标识类型模式

    用接口来标识一种没有任何行为的抽象类型

    6, 常量接口模式

    在接口中定义静态常量,在其它类中通过import static语句引入这些常量

    Java接口的特征归纳:

    1, Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)

    2, Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化 

    1. public interface A  
    2.    {  
    3.     int CONST = 1; //合法,CONST默认为public,static,final类型  
    4.     void method(); //合法,method()默认为public,abstract类型  
    5.     public abstract void method2(); //method2()显示声明为public,abstract类型  
    6.    } 

    3, Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法

    1. public interface A  
    2.   {  
    3.    int var; //错,var是常量,必须显示初始化   
    4.    void method(){...};   //错,接口中只能包含抽象方法  
    5.    protected void method2(); //错,接口中的方法必须是public类型  
    6.    static void method3(){...};   //错,接口中不能包含静态方法  
    7.   } 

    4, 接口中没有构造方法,不能被实例化

    1. public interface A  
    2.   {  
    3.    public A(){...}; //错,接口中不能包含构造方法  
    4.    void method();  
    5.   } 

    5, 一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口

    1. public interface A  
    2.  {  
    3.   void methodA();  
    4.  }  
    5.  public interface B  
    6.  {  
    7.   void methodB();  
    8.  }  
    9.  public interface C extends A, B   //C称为复合接口  
    10.  {  
    11.   void methodC();  
    12.  }  
    13.  public interface C implements A{...}   //错 


    6, Java接口必须通过类来实现它的抽象方法

    public class A implements B{...}

    7, 当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象的

    8, 不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

    1. public class B implements A{}  
    2.    A a = new B(); //引用变量a被定义为A接口类型,引用了B实例  
    3.    A a = new A(); //错误,接口不允许实例化 

    9, 一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.

    public class A extends B implements C, D{...} //B为class,C,D为interface

    4, 通过接口,可以方便地对已经存在的系统进行自下而上的抽象,对于任意两个类,不管它们是否属于同一个父类,只有它们存在相同的功能,就能从中抽象出一个接 口类型.对于已经存在的继承树,可以方便的从类中抽象出新的接口,但从类中抽象出新的抽象类却不那么容易,因此接口更有利于软件系统的维护与重构.对于两 个系统,通过接口交互比通过抽象类交互能获得更好的松耦合.

    5, 接口是构建松耦合软件系统的重要法宝,由于接口用于描述系统对外提供的所有服务,因此接口中的成员变量和方法都必须是public类型的,确保外部使用者 能访问它们,接口仅仅描述系统能做什么,但不指明如何去做,所有接口中的方法都是抽象方法,接口不涉及和任何具体实例相关的细节,因此接口没有构造方法, 不能被实例化,没有实例变量.

    二, 比较抽象类与接口

    1, 抽象类与接口都位于继承树的上层

    相同点

    1, 代表系统的抽象层,当一个系统使用一颗继承树上的类时,应该尽量把引用变量声明为继承树的上层抽象类型,这样可以提高两个系统之间的送耦合

    2, 都不能被实例化

    3, 都包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不提供具体的实现

    不同点:

    1, 在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们,这是抽象类的优势,但这一优势限制了多继承,而接口中只能包含抽象方法.由于在 抽象类中允许加入具体方法,因此扩展抽象类的功能,即向抽象类中添加具体方法,不会对它的子类造成影响,而对于接口,一旦接口被公布,就必须非常稳定,因 为随意在接口中添加抽象方法,会影响到所有的实现类,这些实现类要么实现新增的抽象方法,要么声明为抽象类

    2, 一个类只能继承一个直接的父类,这个父类可能是抽象类,但一个类可以实现多个接口,这是接口的优势,但这一优势是以不允许为任何方法提供实现作为代价的 三, 为什么Java语言不允许多重继承呢?当子类覆盖父类的实例方法或隐藏父类的成员变量及静态方法时,Java虚拟机采用不同的绑定规则,假如还允许一个类 有多个直接的父类,那么会使绑定规则更加复杂,

    因此,为了简化系统结构设计和动态绑定机制,Java语言禁止多重继承.而接口中只有抽象方法,没有实例变量和静态方法,只有接口的实现类才会实现 接口的抽象方法(接口中的抽象方法是通过类来实现的),因此,一个类即使有多个接口,也不会增加Java虚拟机进行动态绑定的复杂度.因为Java虚拟机 永远不会把方法与接口绑定,而只会把方法与它的实现类绑定.四, 使用接口和抽象类的总体原则:

    1, 用接口作为系统与外界交互的窗口站在外界使用者(另一个系统)的角度,接口向使用者承诺系统能提供哪些服务,站在系统本身的角度,接口制定系统必须实现哪 些服务,接口是系统中最高层次的抽象类型.通过接口交互可以提高两个系统之间的送耦合系统A通过系统B进行交互,是指系统A访问系统B时,把引用变量声明 为系统B中的接口类型,该引用变量引用系统B中接口的实现类的实例。

    1. public interface B  
    2.  {  
    3.  }  
    4.  public class C implements B  
    5.  {  
    6.  }  
    7.  public class A  
    8.  {  
    9.  }  
    10.  B a = new C(); 


    2, Java接口本身必须非常稳定,Java接口一旦制定,就不允许随遇更加,否则对外面使用者及系统本身造成影响

    3, 用抽象类来定制系统中的扩展点

    抽象类来完成部分实现,还要一些功能通过它的子类来实现

  • 相关阅读:
    解决 搭建Jekins过程中 启动Tomcat的java.net.UnknownHostException异常
    射手和农场主
    java 和 JS(javaScript)中的反斜杠正则转义
    分享修改密码的SharePoint Web part: ITaCS Change Password web part
    分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机
    Office 365 的公共网站的一些限制及解决的办法
    SharePoint 2013 关闭 customErrors
    安装 KB2844286 导致SharePoint 2010 XSLT web part 显示出现错误
    安装Office Web Apps Server 2013 – KB2592525安装失败
    如何将hyper-v虚拟机转换成vmware的虚拟机- 转换SharePoint 2010 Information Worker Demonstration and Evaluation Virtual Machine (SP1)
  • 原文地址:https://www.cnblogs.com/apigiraffe/p/2663160.html
Copyright © 2011-2022 走看看