标志接口,空接口,

标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,

它仅仅表明实现它的类属于一个特定的类型。

标接口在Java语言中有一些很著名的应用,比如java.io.Serializable和java.rmi.Remote等接口便是标识接口。

标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签。

举个例子来说吧。

猎人用猎枪打猎,猎枪面对的目标是人不开火,猎枪面对的不是人的话就会开火。

//表明万事万物的接口

public interface SomeThing {}

//表明是人类的接口

public interface Humans {}

//表明是植物的接口

public interface Plant {}

接下来就是核心部分了。

//美国人带上了人类的面具

public class American implements Human{}

//日本人没有带人类的面具

public class Japanese {}

//仙人掌带上了植物的面具

public class Cactus implements Plant{}

//编写测试类

public class Hunter {

/*

* 没有任何控制的开火

*/

public void fire(Object target){

if(target instanceof Human)

{

System.out.println("这下完了,打中了一个人,警察来了,赶快跑!");

}

else

{

System.out.println("恭喜你,打中了一个植物!");

}

}

/*

* 只攻击非人类的开火控制

*/

public void inintelligentFire(Object target){

if(target instanceof Human)

{

return;

}

System.out.println("你打了!"+target.getClass()+"一枪");

//下面进行秒杀等相关处理

//销毁他

target=null;

}

public static void main(String[] args) {

Hunter h = new Hunter();

Object[] objects = new Object[]{

new Cactus(),new Japanese(),new American(),new Originals()

};

for (int i = 0; i < objects.length; i++) {

h.inintelligentFire(objects[i]);

}

System.out.println("----------------------------------------------------------------");

for (int i = 0; i < objects.length; i++) {

h.fire(objects[i]);

}

}

}

运行结果如下:

你打了!class kongjiekou.Cactus一枪

你打了!class kongjiekou.Japanese一枪

----------------------------------------------------------------

恭喜你,打中了一个植物!

恭喜你,打中了一个植物!

这下完了,打中了一个人,警察来了,赶快跑!

这下完了,打中了一个人,警察来了,赶快跑!

由此可以看出来,有智能控制的打了两枪,打了植物和因为自负没有带人类面具的日本人;但是没有控制的打了所有的人和植物。

这样一来,我们就可以理解空接口的定义和作用了。

时间: 2024-08-30 11:02:20

标志接口,空接口,的相关文章

Go的空接口

空接口(interface{})不包含任何的方法,正因为如此,所有的类型都实现了空接口,因此空接口可以存储任意类型的数值.它有点类似于C语言的void *类型. ????var v1 interface{} = 1 // 将int类型赋值给interface{} ????var v2 interface{} = "abc" // 将string类型赋值给interface{} ????var v3 interface{} = &v2 // 将*interface{}类型赋值给i

43_空接口

1.空接口(interface{})不包含任何的方法,正因为如此,所有的类型都实现了空接口,因此空接口可以存储任意类型的数值. 2.它有点类似于C语言的void *类型 代码如下: package main import "fmt" func main() { var v1 interface{} = 1 var v2 interface{} = "ads" var v3 interface{} = &v2 var v4 interface{} = stru

【接口】接口开发+SpringBoot

一.接口的简单介绍 1.什么是接口:接口及服务: 2.接口的分类:(1)系统的内部接口;(2)第三方的外部接口; 3.简述接口原理图: 4.接口协议:是指客户端跟服务器之间或者接口与接口间进行的通讯时必须要遵从的约定和要求; 互联网上 应用最为广泛的一种网络协议--http协议(超文本传输协议),因此最常见的就是http协议的接口.(webservice接口,dubbo接口等都是基于http协议) 5.http协议的组成 请求: 1.url统一资源定位符(接口地址) 2.请求方式(get,pos

Delphi 的接口机制——接口操作的编译器实现过程(1)

学习COM编程技术也快有半个月了,这期间看了很多资料和别人的程序源码,也尝试了用delphi.C++.C#编写COM程序,个人感觉Delphi是最好上手的.C++的模版生成的代码太过复杂繁琐,大量使用编译宏替代函数代码,让初学者知其然而不知其所以然:C#封装过度,COM编程注定是要与操作系统频繁打交道的,需要调用大量API函数和使用大量系统预定义的常量与类型(结构体),这些在C#中都需手工声明,不够简便:Delphi就简单多了,通过模版创建的工程代码关系结构非常清晰,而且其能非常容易使用API函

通过接口调用接口实现类实现松耦合(接口的多态)

项目开发在各个层中通过接口实现松耦合的时候,如何实现接口调用接口实现类? 这里的要求是接口有多个实现类,通过接口调用不的接口实现类! 开始,我想到了IOC(IOC最近忒火),确实有很多开发好的类库unity,ninject等等,但是这些类库都有点太强大了,例 如unity 是可以很容易实现我的要求,那么通过RegisterType<I, N>>(String name)注册:通过Resolve<I>(name) 就可以 用接口调用相应的接口实现类,如果想了解一下unity,

Java 接口及接口回调_Chris

题目: 利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积. 代码: 1.Test.java 1 /** 2 * 测试类,包含一个主方法; 3 * 调用求体积方法输出; 4 */ 5 package cn.edu.ccut.object3; 6 7 import java.util.Scanner; 8 public class Test { 9 10 public static void main(String[] ar

C# 基础知识复习(十)---接口与接口继承

1.接口必须I开头: 2.只有申明,没有实现: 3.实现类在实现方法时,必须名字与接口一致: 4.实现类在实现继承接口时,必须把父接口的方法一并实现: 5.接口申明,默认是public的,这一点与class不同. C# 接口(Interface) 接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 接口定义了属性.方法和事件,这些都是接口的成员.接口只包含了成员的声明.成员的定义是派生类的责任.

接口、接口优点、接口的属性和方法特性、接口与继承的区别、接口与抽象类的区别、匿名实现类、JDK1.8新特性、打印类名称

接口里的属性,必须是公共的/默认的&静态的&Final&初始化后的属性: 接口里所有方法都是抽象的. 接口和继承---先天有的用继承,后天学习的用接口: 接口特性-------- 1.接口不可以被实例化: 2.实现类必须实现接口中所有方法,否则实现类必须是抽象类 3.实现类可以实现多个接口,来弥补Java不能多继承: 4.接口中的变量都是静态常量:(静态的-可以通过类的名字点-直接调用:) ----------------------------------------------

接口,接口的定义

接口interface,顾名思义,是为了一种事物与另一种事物进行交流提供的通道(手段),例如我们现在的操作系统是Windows系统,我们见到的界面和各个功能的按钮都是图形用户接口,接口就是用户和应用程序内部交互的界面.接口实际上有两种含义:一是一个类所具有的方法的特征集合,是一种逻辑上的抽像:二是java接口,java语言中存在的结构,有特定的语法和结构,前者叫做"接口"后者叫做"java接口".本节我们研究的是java接口. java中的接口是一系列方法的声明,是