没有任何方法的接口——标识接口

Gd最初对接口的理解就是整合不同的方法声明为不同的派生类提供合适的方法的特殊的“类”。后来发现还有没有任何方法的接口,这我就有点不理解了,接口本就是为方法分类提供方便的,没有了方法说明还有什么用呢???但是既然有这种接口,就一定  有它的作用,于是通过查阅资料,得出了对此类接口,也就是标识接口的理解:

首先看一下标准的接口的概念:由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念。接口是抽象方法定义的集合(接口中也可以定义一些常量值),是种特殊的抽象类。接口中只包含方法的定义,没有方法的实现。接口中的所有方法都是抽象的。接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰。由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接达到多重继承的目的。

接下来就要步入这牌文章的正题了——标识接口,在Java语言中,有些接口没有声明任何方法,也就是说,实现这些接口的类不需要重写任何方法,这些没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有任何语义上的要求,它仅仅充当一个标识的作用,用来表明实现它的类属于一个特定的类型。标识接口类似于汽车的标志图标,每当人们看到一个汽车的标志图标时,能知道这款汽车的品牌。Java类库中已存在的标识接口有Cloneable和Serializable等。在使用时会经常用instanceof来判断实例对象的类型是否实现了一个给定的标识接口。

看到这里不知道大家是否对标识接口有所理解了呢?反正Gd看到这里仍然是一头雾水,直到看见了下面的实例,才有了那种拨得云开见日出的豁然开朗的感觉!实例的说明是:要开发一款游戏,游戏里面有一个人物专门负责出去寻找有用的材料,假设这个人物只收集矿石和武器,而不会收集垃圾,这个功能就可以通过标识接口来实现:

package pp.biaoshijiekou;


import java.util.ArrayList;


//材料
interface Stuff{};
//矿石
interface Ore extends Stuff{};
//武器
interface Weapon extends Stuff{};
//垃圾
interface Rubbish extends Stuff{};
//金矿
class Gold implements Ore
{
	public String toString()
	{
		return "Gold";
	}
}
//铜矿
class Copper implements Ore
{
	public String toString()
	{
		return "Copper";
	}
}
//枪
class Gun implements Weapon
{
	public String toString()
	{
		return "Gun";
	}
}
//榴弹
class Grenade implements Weapon
{
	public String toString()
	{
		return "Grenade";
	}
}
//石头
class Stone implements Rubbish
{
	public String toString()
	{
		return "Stone";
	}
}
public class Test {
	//丢垃圾
	public static ArrayList<Stuff> getStuff(Stuff[] s)
	{
		ArrayList<Stuff> al = new ArrayList<Stuff>();
		for(int i=0;i<s.length;i++)
		{
			//用instanceof来判断实例对象的类型是否实现了一个给定的标识接口
			if(!(s[i] instanceof Rubbish))
			{
				al.add(s[i]);
			}
		}
		return al;
	}
	public static void main(String args[])
	{
		//将材料放在野外
		Stuff[] s = {new Gold(),new Copper(),new Gun(),new Grenade(),new Stone()};
		//丢垃圾,留下有用的东西
		ArrayList<Stuff> al = getStuff(s);
		System.out.println("我找到了:");
		for(int i=0;i<al.size();i++)
		{
			System.out.print(al.get(i));
			System.out.println("!!!");
		}
		
	}
}

程序的输出结果如下图:


这里就将标识接口作为泛型应用到了方法中,方便在一群材料中找到有用的,丢掉垃圾。


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值