`

标识接口的作用

阅读更多
标识接口就是空方法的接口,与其他接口的区别是:这个接口里面什么方法都没有,只是标记而已。例如serilizeabled就是这样一个接口,他只是告诉jvm,继承于这个接口的CLASS需要序列化处理,而我们根本不用实现这个接口的方法


标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。
标接口在Java语言中有一些很著名的应用,比如java.io.Serializable和java.rmi.Remote等接口便是标识接口。标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签。
打个比喻,不是很恰当。就像是一个人穿了件名牌衣服(实现了标识接口),别人一看他穿的衣服(标识接口)就知道他的品味、身份(特性)。

下面是一个示例:

这是昨天我跟天意在一次闲聊中一次有起的讨论,标签接口真有那么重要吗?比如说很多初学者认为java.io.Serializable这样的接口,很多时候可用可不用,不用一样能执行对象系列化功能。
  为此,我们通过一个通俗而有趣的示例!这个示例是设计一个猎人,其持有一把智能猎*,这就是说这把猎*会自动识别人类,若发现瞄准的目标是人类,就不会开火,而其它的任何事物都通杀。
  为此,我们使用了下面三个接口:
  一个用来表示万事万物的SomeThing
    
  public interface SomeThing {}  
  人类的接口:
  public interface Humans extends SomeThing {}

  动物的接口:
public interface Animals extends SomeThing {}

然后是一系列的实现:
   中国人:     
public class Chinese implements Humans {}

   日本人:
public class Japanese {}

   狗:
public class Dog implements Animals {}

妖怪(他很聪明,给自己帖上了人的标签):
public class Monster implements Humans {}

下面这个程序的核心部分,猎人类及客户端程序:
public class Hunter {
public void fire(Object target)
{
if(target instanceof Humans)
{
  System.out.println("这下完了,打中了一个人,该去坐牢了!");
}
else
{
  System.out.println("恭喜你,打中了一只动物!");
}
}
//智能的枪
public void intelligentFire(Object target)
{
if(target instanceof Humans)
{
  return;
}
System.out.println("开了一枪!"+target.getClass());
//下面进行秒杀等相关处理
//销毁他
target=null;
}
public static void main(String[] args) {
Hunter hunter=new Hunter();
Object[] objects=new Object[]{new Dog(),new Japanese(),new Japanese(),new Chinese(),new Monster(),new SomeThing(){}};
for(int i=0;i<objects.length;i++)
hunter.intelligentFire(objects[i]);
}
}

运行程序,你会发现输出类似下面结果:

开了一枪!class springroad.demo.taginterface.Dog
开了一枪!class springroad.demo.taginterface.Japanese
开了一枪!class springroad.demo.taginterface.Japanese
开了一枪!class springroad.demo.taginterface.Hunter$1

  由此可见,智能猎*瞄准6个目标,开了4枪。只对Chinese、及Monster的实例没有开枪。因为这里讨论的是标签接口,虽然Humans没有任何方法,但从智能猎*的角度来看,他就是通过这个标签来判断是否可以开火的。他不用管也管不了目标的层次等级关系(比如Japanese肯定很非常鲜明等级结构),即继承关系。他也管不了目标的来自于哪儿。比如,是用new操作符创建,还是从容器中取,或者是从网络某个地方加载一个。
  Hunter只是制订了一个简单的规则,你要想不让我的*对你开火,你就必须在自己身上帖上一个Humans的标签。也就是说你必须遵守这个规则。
  现在回过头来看,因为妖怪Monster真身应该是一条蛇或其它什么动物,但是他懂得Hunter制订的规则,于在巧妙的给自己帖上了一个Humans的标签,以致于欺骗了我们的智能猎*。
  而Japanese则自认为自己了不起,不按规则办事,我就不理你Hunter制订的规则,什么Humans标签,我就是不用。于是放到我们的程序中当然就只有挨杀的份了。

  由此可见,空接口(标签接口)的重要性,在像本例中,给不给自己帖上标签,这是一个性命莜关的问题。其实在OO的世界中,空接口可以算是最高的层像。


分享到:
评论

相关推荐

    后端接口文档例子 word

    * 描述:接口的简要描述,用于解释接口的用途和作用。 * 标签:接口的关键词,用于标识接口的类型和用途。 * 请求参数:接口的请求参数,包括参数名、参数类型、是否必填、说明等信息。 * 返回参数:接口的返回参数...

    接口文档模板.docx

    接口文档在软件开发中起着至关重要的作用,它定义了不同系统或组件之间的通信规则,确保数据能够准确、高效地传递。以下是一个详尽的接口文档模板及其关键知识点的解析: 1. **接口文档的基本结构** - **接口名称*...

    7.10 接口设计说明(IDD).docx

    【接口设计说明(IDD)】是软件开发过程中关键的文档之一,主要用来详细描述系统、子系统、...通过详细的接口设计,开发人员可以理解系统组件间如何相互作用,从而减少潜在的错误和冲突,提高软件的整体质量和可靠性。

    pythonapi接口开发教程-Python-接口开发入门解析.pdf

    本教程主要介绍了如何使用Python的Flask框架进行API接口的开发,包括其作用、基本步骤以及项目目录结构的规划。 一、开发接口的作用: 1. Mock接口:在某些接口尚未开发完成的情况下,可以通过编写模拟接口返回期望...

    接口文档的描述

    * 接口名称:一个独特的名称,用于标识接口。 * 接口描述:对接口的简要描述,用于解释接口的作用和使用方法。 * 接口格式:接口的格式,包括输入参数和返回值。 * 参数说明:对输入参数的解释,包括参数名称、参数...

    PCIeM.2接口规范V1.0接口定义.pdf

    通过这些知识点,我们可以理解PCIe M.2接口规范对于设计和开发与M.2技术相关的计算机硬件产品的重要性,以及它在确保硬件兼容性和提升性能方面的作用。随着技术的进步,这些规范也可能会随着新版本的发布而更新,...

    ABB机器人控制柜面板接口功能介绍.docx

    X2接口是服务口,通常标识为黄色图标,这个接口主要用作与电脑的通讯连接。通过使用ABB的RobotStudio软件,用户可以进行离线编程,将程序上传至或下载自控制柜,大大提升了工作效率和调试的灵活性。 X3接口是示教器...

    Java中接口的作用.pdf

    首先,接口作为类的标识,允许类实现多个接口,这在Java中被称为多重继承。由于Java不支持类的多继承,因此接口成为了实现多继承的一种方式。通过实现不同的接口,一个类可以具有多种不同的行为特征,这使得我们可以...

    接口需求文档模板.rar

    1. **接口概述**:这部分会简述接口的主要目的和作用,以及它在系统中的位置和重要性。 2. **接口定义**:详细列出接口的名称、版本、接口ID等信息,便于管理和追踪。 3. **接口输入与输出**:明确指出接口接受的...

    PCIe-M.2-接口规范-V1.0-接口定义

    这些接口对于提高设备的集成度、缩小设备尺寸、降低功耗和提高数据传输速度等方面具有重要作用。 PCI-SIG组织对本规范文档中使用信息的任何错误或误差不承担责任,并且不保证更新文档中的信息。欲了解最新版本的...

    通过路由器子接口配置Vlan间的路由

    路由器的子接口可以充当网关的作用,每个子接口对应交换机的一个Vlan。通过路由器内部子接口之间的第三层包的相互转发,实现Vlan之间的第三层互通。 二、路由器的子接口介绍 所谓子接口,就是在一个物理接口上配置...

    移动MAS短信接口文档3/4

    无论是在企业内部通知、客户互动还是业务流程自动化中,这些接口都能发挥重要作用。对于熟悉相关接口和协议的开发者来说,可以轻松地将短信服务整合到他们的应用程序中,提升用户体验和工作效率。

    markdown编写api接口文档

    - **API接口文档作用**:API(Application Programming Interface)接口文档用于描述应用程序接口的具体实现细节,包括接口的功能、请求方法、请求参数、返回值等,是开发者之间沟通的重要工具。 #### 二、文档结构...

    我的接口说明文档模板

    在软件开发过程中,接口文档是不可或缺的一部分,尤其是在Java开发中,它起到了沟通开发者与使用者、团队内部协作的重要作用。一个良好的接口说明文档模板能够确保所有相关人员对接口的理解一致,提高开发效率并减少...

    支付宝单笔交易查询接口

    这个接口在日常运营中具有重要的作用,例如处理退款、对账、订单状态跟踪等场景。下面我们将详细探讨这个接口的功能、使用方法以及相关知识点。 一、接口功能 1. **交易查询**:通过接口,可以查询到指定交易的当前...

    接口学习,课件

    - **接口的作用**: - 实现数据的输入输出操作。 - 控制设备状态。 - 提供必要的电源和时钟信号。 - **接口类型**: - **定时/计数接口**: 用于时间测量和定时控制。 - **中断接口**: 支持异步事件处理,提高系统...

    接口技术课后作业答案(全)

    3. **接口设计原则**:良好的接口设计应遵循一些原则,如最小化接口、一致性、无副作用、灵活性和可扩展性等。 4. **Java接口**:在Java中,接口是一种完全抽象的类型,只包含常量和抽象方法。Java 8引入了默认方法...

    网络接口汇总

    "网络接口汇总"这个主题涵盖了各种类型的接口,包括硬件接口和软件接口,它们在互联网和局域网通信中起着至关重要的作用。以下是关于网络接口的一些详细知识点: 1. **物理接口**:这些是计算机硬件上的接口,例如...

    泛微E9统一集成待办中心接口文档

    - 功能描述:该接口的主要作用是接收来自外部系统的待办流程信息,并将其整合到统一待办中心。 3. **参数说明**: - `syscode`:标识发送待办信息的异构系统。 - `flowid`:流程实例的唯一ID。 - `requestname...

Global site tag (gtag.js) - Google Analytics