JAVA:接口的使用及意义

在网上搜了很多关于使用接口的意义,大多数的文章都指出创建了一套规则,规范了实现接口的类的规则;为写代码提供了很大的规范上的作用;或是仅仅只是教你一下接口怎么实现;

老实说,怎么定义接口,怎么在类里实现,其实非常好懂,而我最不理解的是,既然接口要求实现他的类实现接口中规定的统一的方法。那我不定义接口,在类中或同样标识(返回值,方法名,参数,访问权限)的方法不就好了吗,他的意义在哪里呢?

经过反复阅读网友们不同的解释和代码演示,本人总结出一个使用接口的意义,如果还有更多的实际使用的意义,还请网友们补充;

下面我们先来讨论一下实际编程中的问题;比如说我有一个动物列表,里面有很多类型的动物,如狗,鸟,鱼;狗爱吃骨头,会叫barking,移动方式是跑,工作是看家,鸟和鱼吃虫子,鸟会唱歌,会飞,没有工作,鱼不会叫,也没有工作,鱼会游。它们属于三种不同的动物;

现在我要列出三种动物不同的行为,至少需要三个变量组来存放同一种类的动物,并依次遍历他们的行为。如果后期程序中要加入其他不同类型的动物,比如猫,他的工作是抓老鼠,我们就要重新去定义一个新的变量组出来,用来存放不同的猫,再来遍历猫的行为;或是我要把鱼从代码中去掉,代码的修改工作比较大。而使用接口就能很好的解决这个问题:

接下去我们来看一下具体的代码(相信有编程实践的朋友一眼就能看懂其中的意义)

先定义一个动物行为的接口:

package InterfaceTest;

public interface AnimalAction {
	public void eat();

	public void move();

	public void whistler();

	public void work();
}

再定义狗,鸟,鱼三类动物,并实现行为接口:

类:狗

package InterfaceTest;

public class Dog implements AnimalAction {
	public String name;

	public Dog(String DogName) {
		name = DogName;
	}
	public void eat() {
		System.out.println(name + " is a dog,Likes eat bone.");
	}
	public void move() {
		System.out.println(name + " is a dog,Move Type is Run.");
	}
	public void whistler() {
		System.out.println(name + " is a dog,Whistler type is barking.");
	}
	public void work() {
		System.out.println(name + " is a dog,work is look house.");
	}
}

类:鸟

package InterfaceTest;

public class Bird implements AnimalAction {
	public String name;

	public Bird(String BirdName) {
		name = BirdName;
	}
	public void eat() {
		System.out.println(name + " is a Bird,Likes eat insect.");
	}
	public void move() {
		System.out.println(name + " is a Bird,Move Type is Fly.");
	}
	public void whistler() {
		System.out.println(name + " is a Bird,Whistler type is sing.");
	}
	public void work() {
		System.out.println(name + " is a Bird,no work.");
	}
}

类:鱼

package InterfaceTest;

public class Fish implements AnimalAction {
	public String name;

	public Fish(String FishName) {
		name = FishName;
	}
	public void eat() {
		System.out.println(name + " is a Fish,Likes eat insect.");
	}
	public void move() {
		System.out.println(name + " is a Fish,Move Type is Fly.");
	}
	public void whistler() {
		System.out.println(name + " is a Fish,cannot Whistler.");
	}
	public void work() {
		System.out.println(name + " is a Fish no work.");
	}
}

最后应用的代码:

package InterfaceTest;

public class AnimalInterfaceTest {
	public static void main(String args[]) {
		AnimalAction animals[] = { new Dog("James"), new Bird("Lingling"), new Dog("wangwang"), new Bird("bingle"),
				new Fish("Kingk") };

		for (int i = 0; i <= animals.length; i++) {
			animals[i].eat();
			animals[i].move();
			animals[i].whistler();
			animals[i].work();
			System.out.println("*************************************");
		}
	}
}

关键的代码:

AnimalAction animals[] = { new Dog("James"), new Bird("Lingling"), new Dog("wangwang"), new Bird("bingle"),
				new Fish("Kingk") };

他们多种不同类型的动物挂在了一个列表变量上;在后续代码中遍历时,只需要一个循环就可以了。而且在增加不同动物类型时,只要实现了AnimalAction接口,可以在定义时直接挂接到列表变量组中。for语句中的循环不需要做任何修改;

编写此文为自已留下可查阅的技术文档,也希望能帮助需要的网友解答疑惑。相信接口应使用场景不止于些,欢迎网友补充。

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

补充一个通过迭代器遍历集合的方法:

package InterfaceTest;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class AnimalInterfaceTest {
	public static void main(String args[]) {

		List<AnimalAction> animals = new ArrayList<AnimalAction>();
		animals.add(new Dog("James"));
		animals.add(new Bird("Lingling"));
		animals.add(new Dog("wangwang"));
		animals.add(new Bird("bingle"));
		animals.add(new Fish("Kingk"));

		Iterator<AnimalAction> ite = animals.iterator();
		while (ite.hasNext())// 判断下一个元素之后有值
		{
			AnimalAction a = ite.next();
			a.eat();
			a.move();
			a.whistler();
			a.work();
			System.out.println("*************************************");
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值