沒有任何方法的接口——標識接口

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("!!!");
		}
		
	}
}

程序的輸出結果如下圖:


這裏就將標識接口作爲泛型應用到了方法中,方便在一羣材料中找到有用的,丟掉垃圾。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章