Java 的标识接口作用
原文地址:作者:
时间:2019-01-2315:49:35
标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。
标接口在java语言中有一些很著名的应用,比如java.io.serializable和java.rmi.remote等接口便是标识接口。标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签。
为此,我们通过一个通俗而有趣的示例!这个示例是设计一个猎人,其持有一把智能猎枪,这就是说这把猎枪会自动识别人类,若发现瞄准的目标是人类,就不会开火,而其它的任何事物都通杀。
为此,我们使用了下面三个接口:
一个用来表示万事万物的something
1 public interface something {}
人类的接口:
1 public interface humans extends something 3 {}
动物的接口:
1 public interface animals extends something {}
然后是一系列的实现:
中国人:
1 public 2 class chinese implements humans {}
日本人:
1 public class japanese {}
狗:
1 public class dog implements animals {}
妖怪(他很聪明,给自己帖上了人的标签):
1 public class monster implements humans {}
下面这个程序的核心部分,猎人类及客户端程序:
1 public class hunter{ 2 3 public void fire(object target) 4 { 5 if(target instanceof humans){ 6 system.out.println("这下完了,打中了一个人,该去坐牢了!"); 7 }else{ 8 system.out.println("恭喜你,打中了一只动物!"); 9 } 10 } 11 //智能的枪 12 public void intelligentfire(object target) 13 { 14 if(target instanceof humans){ 15 return; 16 } 17 system.out.println("开了一枪!"+target.getclass()); 18 //下面进行秒杀等相关处理 19 //销毁他 20 target=null; 21 } 22 23 public static void main(string[] args) { 24 hunter hunter=new hunter(); 25 object[] 26 objects =new object[]{new dog(),new japanese(),new japanese(),new chinese(),new monster(),new something(){}}; 27 for(int i=0; i<objects.length; i++){ 28 hunter.intelligentfire(objects[i]); 29 } 30 }
运行程序,你会发现输出类似下面结果:
开了一枪!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的世界中,空接口可以算是最高的层像。
推荐阅读
-
Java连载55-接口的作用、接口举例
-
java中的关键字和标识符
-
java的作用是什么?
-
php写的前端,java写的后台接口,请问各位大神,php怎样调用后台接口?
-
java实现Runnable接口适合资源的共享
-
java中 instanceof 和 StringUtils.isEmpty(str)和String.StartsWith() 的作用以及用法
-
Java通过接口实现匿名类的实例代码
-
Java Set接口contains(Object o)方法与对象hashCode()方法的关系梳理
-
Java编程接口调用的作用及代码分享
-
Java8新特性之lambda的作用_动力节点Java学院整理