使用关键字interface来定义一个接口。接口的定义和类定义很相似,分为接口声明和接口体。

接口体中包含常量的声明(没有变量)和抽象方法两部分。接口中只有抽象方法,没有普通方法。而且接口体中所有的常量的访问权限一定都是public,而且是static常量,所有抽象方法的访问权限一定都是public(允许省略public abstract修饰符)。接口中的常量一定是public final static修饰的。

在java语言中,接口由类来实现以便使用接口中的方法。如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法。由于接口中的方法一定是public abstract方法,所以类在重写接口方法时不仅要去掉abstract修饰符、给出方法体,而且方法的访问权限一定要明显地用public来修饰(否则会降低访问权限)。

程序可以用接口名访问接口中的常量,但是如果一个类实现了接口,那么该类可以直接在类体中使用该接口中的常量。

定义接口时,如果关键字interface前面加上public,就称这样的接口是一个public接口。public接口可以被任何一个类实现。如果一个接口不加public修饰,就称做友好接口,友好接口可以被与该接口在同一包中的类实现。

如果父类实现了某个接口,那么子类自然实现了该接口。

接口也支持继承,支持多继承,类可以同时实现多个接口。

接口的思想在于它可以要求某些类有相同名称的方法,但方法的具体内容可以不同,即要求这些类实现接口,以保证这些类一定有接口中所声明的方法。

接口回调

和类一样,接口也是java中一种重要数据类型,用接口声明的变量称作接口变量。

在java中,接口回调是指:可以把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法。

接口回调非常类似于上转型对象调用子类重写的方法。接口回调和上转型对象是多态的体现。由接口产生的多态就是指不同的类在实现同一个接口时可能具有不同的实现方式,那么接口变量在回调接口方法时就可能具有多种形态。

如果某个问题不需要继承,只是需要若干个类给出某些重要的abstract方法的实现细节,可以考虑使用接口。

面向接口编程

使用接口进行程序设计的核心思想是使用接口回调,即接口变量存放实现该接口的类的对象的引用。

review06的更多相关文章

随机推荐

  1. api xml database 设计一种数据库

    w 问题 0-新增和读取,可以忽略更新和删除: 1-被请求方的xml dom结构多层且不定,且未来可能增删某些键(dom节点),且键值长度最值可能无法确定: 3-请求过程可能出现异常exception ...

  2. Null Coalescing Operator

    w Parse error: syntax error, unexpected '?'

  3. git的安装-环境变量配置

    windows安装git和环境变量配置 2015.10.12 评论(0) 10,729 点此嗨一下 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源 ...

  4. setlocale(LC_ALL, ""); 取值为空字符串" "(注意,不是NULL),则locale与本地环境所使用的编码方式相同(在本地化时,应该很有用);

    在C运行库提供的多字节字符-宽字符转换函数:mbstowcs()/wcstombs()中,需要用到全局变量locale( locale encoding ),以指定多字节字符的编码类型 1. 功能: ...

  5. 全面Python小抄(转)

    add by zhj: 有些地方不正确,有时间再改吧 原文:Python Cheat Sheet Cheat sheet of Python. Some basic concepts for Pyth ...

  6. MyISAM VS InnoDB

     A.构成上的区别: InnoDB只在磁盘上存储一个文件.frm         每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型:            文 ...

  7. TCP/IP/UDP 协议

    互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能.为了改善这种缺点,大牛弄出了TCP/IP协议.现在几乎所有的操作 ...

  8. equal?, == and eql?, ===,

    1.BasicObject中定义了 == 和equal?这两个方法,两个方法等价,用来比较两个对象是否是同一个对象,是的话结果就为true. 既然两者相同,为何要定义两个呢?只是为了再命名一个别名吗? ...

  9. Loadrunner之脚本篇——事务函数

    1.事务的开始和结束名称需要相同 lr_start_transaction(“transaction_name”); …//事务处理 lr_end_transaction(“transaction_n ...

  10. Windos Server 2008 Tomcat 安装

    web服务:apache-tomcat-7.0.75环境:jdk-7u80-windows-i586 1.安装jdk环境包 2.配置环境变量--> 环境变量--> 新建W --> 变 ...