此例演示java中接口的一般用法。
屋子里有一群程序员,每个人在写着自己的类,共同构建一个世界。
项目经理突然出现:“打扰大家一下,公司决定举办一个竞速比赛,你们写的类都可以参加。为了比赛的顺利进行,大家的类都必须要实现一个速度接口和一个保养接口。速度接口要完成启动、提速、刹车三个动作;保养接口要完成加油、换胎两个动作,具体内容见接口文件,请吃饱了没事干的程序员主动携你们的类报名参加!”
速度接口如下:
public interface SuDu { String start(); String rise_Speed(); String stop(); } |
保养接口如下:
1 2 3 4 5 | public interface BaoYang { String add_Oil(); String feet(); } |
最终,有两个类报名参加,它们分别是:汽车类(car)和乌龟类(Oogway)
它们继承了项目经理要求的接口,并对接口进行了实现。代码如下:
汽车类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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" ; } } |
乌龟类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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" ; } } |
因为直接实现了接口,项目经理就不用对它们进行严格的检查了。
竞速大赛如期举行,因为报名参加的只有两个类,项目经理直接完成了主程序(它甚至都没仔细看下这两个类,因为不需要)
主程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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)思想,以后有机会再聊。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现