Java——标识接口的作用

缺乏、安全感 2022-04-15 05:11 292阅读 0赞

大家都知道,Java不支持多重继承,一个类只能有一个子类。而为了克服单继承的缺点,Java引入了接口的概念。

接口是抽象方法定义的集合,它是一种特殊的抽象类。接口中只包含了方法的定义,并没有方法的实现。接口中所有方法都是抽象的。接口中成员的作用域修饰符都是public,而接口中的常量值默认用public static final来修饰。

由于一个类可以有多个接口,因此通常可以采用实现多个接口的方式来间接达到多重继承的效果。

看接口代码多的人或许会发现,有些接口内部没有声明任何方法,也就是说,实现这些接口的类不需要重写任何方法,这些没有任何方法声明的接口又被叫做“标识接口”。也就是咱们今天的主角。

接下来,就让我们瞅瞅这标识接口到底有什么能耐。

ä½ å¯¹å¡ä¸»è¡¨æåæä¹ç?å¼ ç¿°:åµåµ(ç»å¾)å¾ç

上文已经提到,标识接口嘛,它里边啥方法都没有写,什么都没有,那它有什么用呢?

正如它的名字所言,标识接口嘛,当然是用来当做标识的啦。正因如此,标识接口对于实现它的类没有任何语义上的要求。

该类接口在使用的时候通常会用instanceof来判断示例对象的类型是否实现了一个给定了的标识接口。

举个例子——

还记得那日风云大作,电闪雷鸣,紫气东来,大有吞山之势。本帅博主夜观星象,自觉近日的不凡,似乎将有秘宝出世,遂在出门遛腿之际追寻紫气的踪迹。果不其然,在一个不起眼的臭水沟里,我寻到一杠猎枪。只见该猎枪上贴着一个标签,上书“智能猎枪”几大字,在昏暗的夜色中闪着耀眼的光芒。该猎枪还附赠一本说明书,将该枪的智能说了个明白:该枪会自动分辨人类和猎物(如兔子,羊等),并开枪射击猎物。

拾到此物,我心大喜,立马到林子里试了试,果然,一扫描到猎物它就开枪,一发现是人就不开枪。

咳咳……好的,意淫结束,继续回归正题。

上文本帅博主的意淫就是一个很好的例子,人类相当于是一个标识接口,动物也是一个标识接口。猎枪将借助标识接口来分辨人类和动物,也就是说,当猎枪扫描到继承于人类的所有类都不会开枪,而扫描到继承于猎物的类就会自动开枪。

咳咳,如果大家忍受不了上文的意淫,那么下面就用代码给大家展示一下标识接口的作用。

  1. 一个用来表示万事万物的SomeThing
  2. public interface SomeThing {}
  3. 人类的接口:
  4. public interface Humans extends SomeThing {}
  5. 动物的接口:
  6. public interface Animals extends SomeThing {}
  7. 然后是一系列的实现:
  8. 中国人:
  9. public class Chinese implements Humans {}
  10. 日本人:
  11. public class Japanese {}
  12. 狗:
  13. public class Dog implements Animals {}
  14. 妖怪(他很聪明,给自己帖上了人的标签):
  15. public class Monster implements Humans {}
  16. 下面这个程序的核心部分,猎人类及客户端程序:
  17. public class Hunter {
  18. public void fire(Object target)
  19. {
  20. if(target instanceof Humans)
  21. {
  22. System.out.println("这下完了,打中了一个人,该去坐牢了!");
  23. }
  24. else
  25. {
  26. System.out.println("恭喜你,打中了一只动物!");
  27. }
  28. }
  29. //智能的枪
  30. public void intelligentFire(Object target)
  31. {
  32. if(target instanceof Humans)
  33. {
  34. return;
  35. }
  36. System.out.println("开了一枪!"+target.getClass());
  37. //下面进行秒杀等相关处理
  38. //销毁他
  39. target=null;
  40. }
  41. public static void main(String[] args) {
  42. Hunter hunter=new Hunter();
  43. Object[] objects=new Object[]{new Dog(),new Japanese(),new Japanese(),new Chinese(),new Monster(),new SomeThing(){}};
  44. for(int i=0;i<objects.length;i++)
  45. hunter.intelligentFire(objects[i]);
  46. }
  47. }

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

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

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

因此,在某些重要的时刻,标识接口的重要性可见一斑,毕竟,那可是性命攸关的大事呀~

好啦,以上就是关于标识接口的作用的总结,大家要是有什么疑问或者更好的见解,欢迎大家留言评论,我们一起讨论讨论呀~

参考文章:https://www.aliyun.com/jiaocheng/579062.html

Biu~~~~宫å´éªé¾ç«è¡¨æå|é¾ç«gifå¾è¡¨æåä¸è½½å¾ç~~~~~~pia!

发表评论

表情:
评论列表 (有 0 条评论,292人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java接口作用和意义

    一、什么是接口 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不

    相关 JAVA__接口作用

    接口可以被编写的多个程序重复调用,可以节省电脑的存储空间,并且使用接口可以减少电脑代码运行时出现的错误,在运行多个程序时,也能更有效率的进行。 在计算机里,需要由其他类型的程

    相关 Java——标识接口作用

    大家都知道,Java不支持多重继承,一个类只能有一个子类。而为了克服单继承的缺点,Java引入了接口的概念。 接口是抽象方法定义的集合,它是一种特殊的抽象类。接口中只包含了方

    相关 java 标识接口作用

    标识接口的作用  标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。  标接口在Java语言中有一些