美文网首页
实施接口

实施接口

作者: SingleDiego | 来源:发表于2018-03-12 08:39 被阅读10次

上一篇我们了解到 private 关键字封装了对象的内部成员。经过封装,产品隐藏了内部细节,只提供给用户 接口(interface)。

接口是非常有用的概念,可以辅助我们的抽象思考。在现实生活中,当我们想起某个用具的时候,往往想到的是该用具的功能性接口。

比如杯子,我们想到加水和喝水两个功能,高于想到杯子的材质和价格。也就是说,一定程度上,用具的接口等同于用具本身。内部细节则在思考过程中被摒弃。

publicprivate 的封装机制,我们实际上同时定义了类和接口,类和接口混合在一起。

Java 提供了 interface 这一语法。这一语法将接口从类的具体定义中剥离出来,构成一个独立的主体。




interface(接口)

以杯子为例,定义一个杯子的接口:

interface Cup {
    void addWater(int w);
    void drinkWater(int w);
}

Cup 这个 interface 中定义了两个方法的原型(stereotype):addWater()drinkWater()。规定了 方法名参数列表返回类型。原型可以告诉外部如何使用这些方法。

interface 中,我们

  • 不需要定义方法的主体
  • 不需要说明方法的可见性

注意第二点,interface 中的方法默认为 public。正如我们在封装与接口中讲到的,一个类的 public 方法构成了接口。所以,所有出现在 interface 中的方法都默认为 public

现在我们可以在一个类的定义中把刚才定义的接口具体实施,比如下面的 MusicCup (可以播放音乐的杯子):

interface Cup 
{
    void addWater(int w);
    void drinkWater(int w);
}


class MusicCup implements Cup
{
    public void addWater(int w) // 加水
    {
        this.water = this.water + w;
    }

    public void drinkWater(int w) // 喝水
    {
        this.water = this.water - w;
    }

    public int waterContent() // 返回当前水量
    {
        return this.water;
    }

    private int water = 0;
}


public class Test
{
    public static void main(String[] args)
    {
        MusicCup newCup = new MusicCup(); 
        newCup.addWater(10);
        System.out.println(newCup.waterContent());
    }
}

输出结果:

10

我们用 implements 关键字来实施 interface

一旦在类中实施了某个 interface,必须在该类中定义 interface 中的所有方法(本例中是 addWater()drinkWater())。且类中的方法需要与 interface 中的方法数据类型相符。否则,Java 将报错。

在类中还可以定义 interface 没有提及的其他 public 方法,比如本例中的 waterContent()。也就是说,interface 规定了一个必须要实施的最小接口。




实施多个接口

一个类可以实施不止一个的 interface。我们要造一个可以播放音乐的杯子,可是上例中我们只实现了和水相关的功能,下面我们来让杯子具有音乐相关的功能。

所以 MusicCup 应该具备两套接口,即同时实施 MusicPlayer 接口和 Cup 接口:

// 定义杯子接口
interface Cup 
{
    void addWater(int w);
    void drinkWater(int w);
}

// 定义音乐播放器接口
interface MusicPlayer 
{
    void play();
}


class MusicCup implements Cup, MusicPlayer
{
    public void addWater(int w) 
    {
        this.water = this.water + w;
    }

    public void drinkWater(int w)
    {
        this.water = this.water - w;
    }

    public int waterContent()
    {
        return this.water;
    }

    public void play() // 实施音乐播放器接口
    {
        System.out.println("la...la...la");
    }

    private int water = 0;
}


public class Test
{
    public static void main(String[] args)
    {
        MusicCup newCup = new MusicCup(); 
        newCup.addWater(10);
        System.out.println(newCup.waterContent());
        newCup.play();
    }
}

输出结果:

10
la...la...la

相关文章

  • 实施接口

    上一篇我们了解到 private 关键字封装了对象的内部成员。经过封装,产品隐藏了内部细节,只提供给用户 接口(i...

  • Ant+Jmeter自动化接口测试

    背景 最近在看Jmeter和接口测试,发现了几个问题,基于HTTP协议的接口测试实施起来很简单,但是怎么实施接口测...

  • 领悟系统接口测试

    实施接口测试的优先级是:对暴露在外面的接口(该接口会给第三方调用)进行接口测试;内部的核心功能接口也会做接口测试;...

  • Java基础教程之接口的继承与抽象类

    Java基础教程之接口的继承与抽象类 在实施接口中,我们利用interface语法,将interface从类定义中...

  • EntityFramework 6 实现软删除

    准备工作 需要下载的包 EntityFramework DynamicFilter 实施 接口 测试模型 模拟se...

  • 接口只用于定义类型

    当类实现接口时,接口就充当可以引用这个类的实例的类型。因此,类实现了接口,就表明可以对这个类的实例实施某些动作。那...

  • 第19条 接口只用于定义类型

    当类实现接口时,接口就充当可以引用这个类的实例的类型。因此,类实现了接口,就表明客户端对这个类的实例可以实施某些动...

  • 小程序:没了getUserInfo我们该何去何从?

    最近,微信发布了小程序与小游戏获取用户信息接口调整。并在2018.5.10号正式实施,也就意味着用户登录接口不能使...

  • yapi平台--接口自动化实施

    一、测试合集入口 1--分组2--项目3--接口4--测试集合 二、添加测试集合 1、点击添加集合--输入合集名称...

  • 明日计划:每天有不同的计划,但总的计划是同样的

    今日复盘: 1. 工作上最大的进步就是知道怎么写接口的测试用例了,而且更加了解怎么用postman实施最基础的接口...

网友评论

      本文标题:实施接口

      本文链接:https://www.haomeiwen.com/subject/invsfftx.html