万金流
以码会友。 吾Q:578751655。 水平有限,轻喷,谢!
随笔 - 189,  文章 - 0,  评论 - 7,  阅读 - 14万

此例演示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)思想,以后有机会再聊。

posted on   万金流  阅读(328)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现

点击右上角即可分享
微信分享提示