此例演示java中接口的一般用法。
屋子里有一群程序员,每个人在写着自己的类,共同构建一个世界。
项目经理突然出现:“打扰大家一下,公司决定举办一个竞速比赛,你们写的类都可以参加。为了比赛的顺利进行,大家的类都必须要实现一个速度接口和一个保养接口。速度接口要完成启动、提速、刹车三个动作;保养接口要完成加油、换胎两个动作,具体内容见接口文件,请吃饱了没事干的程序员主动携你们的类报名参加!”
速度接口如下:
public interface SuDu { String start(); String rise_Speed(); String stop(); }
保养接口如下:
public interface BaoYang { String add_Oil(); String feet(); }
最终,有两个类报名参加,它们分别是:汽车类(car)和乌龟类(Oogway)
它们继承了项目经理要求的接口,并对接口进行了实现。代码如下:
汽车类:
public class Car implements BaoYang,SuDu { public String start() { return "汽车现在开始启动了,轮胎在地面上磨起了阵阵黑烟,遮天蔽日。\n"; } public String rise_Speed() { return "只见驾驶员咔咔换档,汽车速度很快升到了200KM/H,而且还在增加~!!\n"; } public String stop() { return "只听\"吱~~\"的一声,汽车险险停住,差点冲出跑道,压死一只蚂蚁。\n"; } public String add_Oil() { return "汽车换胎的时候,静静地停在这里,什么也不想,油箱里灌注着我需要的血液……人生就应该这样\n"; } public String feet() { return "工程师换完轮胎,我又可以蹦蹦跳跳冲上公路了!\n"; } }
乌龟类:
public class Oogway implements BaoYang,SuDu { public String start() { return "乌龟现在开始启动了,只见它爪子用力地刨啊刨,可咋就不动地方呢?\n"; } public String rise_Speed() { return "乌龟变身为忍者神龟,它开始两条腿向前冲了~\n"; } public String stop() { return "只见乌龟全身缩进龟壳,\"吱~~\"的一声,龟壳和地面摩擦,擦出阵阵火星!\n"; } public String add_Oil() { return "本龟四脚朝天,喝着新鲜的露珠,心里想着:能来份兔子肉就完美了~\n"; } public String feet() { return "剪剪龟指甲,再图个紫色的指甲油,今天一定要跑出新的世界纪录!\n"; } }
因为直接实现了接口,项目经理就不用对它们进行严格的检查了。
竞速大赛如期举行,因为报名参加的只有两个类,项目经理直接完成了主程序(它甚至都没仔细看下这两个类,因为不需要)
主程序如下:
public class c1 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("台上十分钟,请看:\n"); System.out.println(race()); System.out.println("-----------------------\n"); System.out.println("台下十年功,请看:\n"); System.out.println(rest()); } public static String race() { SuDu s1,s2; String result=""; s1=new Car(); s2=new Oogway(); result+=s1.start(); result+=s2.start(); result+=s1.rise_Speed(); result+=s2.rise_Speed(); result+=s1.stop(); result+=s2.stop(); return result; } public static String rest() { BaoYang s1,s2; String result=""; s1=new Car(); s2=new Oogway(); result+=s1.add_Oil(); result+=s2.add_Oil(); result+=s1.feet(); result+=s2.feet(); return result; } }
程序执行结果……自己分析以后运行一下吧。。。
题外话:这里的race和rest方法,代码都很依赖具体的接口实现类。可以通过设置注入点的方式,让代码松耦合,更加通用。这也是控制反转(IoC)思想,以后有机会再聊。