Java基础05 实施接口(转载) - Airry

airry66 2021-08-27 原文


Java基础05 实施接口(转载)


经过封装,产品隐藏了内部细节,只提供给用户接口(interface)。

接口是非常有用的概念,可以辅助我们的抽象思考。在现实生活中,当我们想起某个用具的时候,往往想到的是该用具的功能性接口。比如杯子,我们想到加水和喝水的可能性,高于想到杯子的材质和价格。也就是说,一定程度上,用具的接口等同于用具本身。内部细节则在思考过程中被摒弃。
 
在public和private的封装机制,我们实际上同时定义了类和接口,类和接口混合在一起。Java还提供了interface这一语法。这一语法将接口从类的具体定义中剥离出来,构成一个独立的主体。

interface

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

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

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

在interface中,我们

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

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

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

class MusicCup implements Cup{
    public void addWater(int w){
        this.water = this.water + w;
    }
    public void drinkWater(int w){
        this.water = this.water – w;
    }
    private int water = 0;
}

我们用implements关键字来实施interface。一旦在类中实施了某个interface,必须在该类中定义interface的所有方法(addWater()和drinkWater())。类中的方法需要与interface中的方法原型相符。否则,Java将报错。

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

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 void waterContent(){
        return this.water;
    }
    private int water = 0;
}

分离接口的意义

我们使用了interface,但这个interface并没有减少我们定义类时的工作量。我们依然要像之前一样,具体的编写类。我们甚至于要更加小心,不能违反了interface的规定。既然如此,我们为什么要使用interface呢?

事实上,interface就像是行业标准。一个工厂(类)可以采纳行业标准 (implement interface),也可以不采纳行业标准。但是,一个采纳了行业标准的产品将有下面的好处:

  • 更高质量: 没有加水功能的杯子不符合标准。
  • 更容易推广: 正如电脑上的USB接口一样,下游产品可以更容易衔接。

如果我们已经有一个Java程序,用于处理符合Cup接口的对象,比如领小朋友喝水。那么,只要我们确定,我们给小朋友的杯子(对象)实施了Cup接口,就可以确保小朋友可以执行喝水这个动作了。至于这个杯子(对象)是如何具体定义喝水这个动作的,我们就可以留给相应的类自行决定 (比如用吸管喝水,或者开一个小口喝水)。

在计算机科学中,接口是很重要的概念。比如任何提供UNIX接口的操作系统都可以称作UNIX系统。Linux,Mac OS,Solaris都是UNIX系统,它们提供相似的接口。但是,各个系统的具体实施(源代码)互不相同。Linux是开源的,你可以查看它的每一行代码,但你还是不知道如何去编写一个Solaris系统。

实施多个接口

一个类可以实施不止一个的interface。比如我们有下面一个interface:

interface MusicPlayer(){
    void play();
}

 
我们再来考虑MusicCup类。MusicCup可以看做播放器和杯子的混合体。
 
所以MusicCup应该具备两套接口,即同时实施MusicPlayer接口和Cup接口:

class MusicCup implements MusicPlayer,Cup{
    public void addWater(int w){
        this.water = this.water + w;
    }
    public void drinkWater(int w){
        this.water = this.water – w;
    }
    public void play(){
        System.out.println(“la..la..la..”);
    }
    private int water = 0;
}

posted on
2014-08-21 17:16 
Airry 
阅读(121
评论(0
编辑 
收藏 
举报

 

版权声明:本文为airry66原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/airry66/p/3927659.html

Java基础05 实施接口(转载) - Airry的更多相关文章

  1. Java中的数组和方法 – 盒子先生金金

    Java中的数组和方法 3.1 数组的定义和使用 数组(Array)是用来存储一组相同数据类型数据的集合。数组 […]...

  2. [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)

    目录 1、安装python环境 2、安装Django 3、第一个例子hello world 4、自己建视图 5 […]...

  3. 如何高效的使用-Notepad++ – Java知音号

    如何高效的使用-Notepad++ Notepad++功能比 Windows 中的 Notepad(记事本)强 […]...

  4. 网站和解决方案管理(1) – 竹仪攸欣

       SharePoint 2010针对多利益干系人方案进行显著改进,从安全角度和保持性能的角度而言,这些方案 […]...

  5. 如何配置静态MAC地址 – Hakka-Youth

    如何配置静态MAC地址   目录导航: 1、静态MAC地址简介 2、组网需求 3、配置思路 4、配置步骤 5、 […]...

  6. 谈谈时区,日历,时间格式和国际化 – Anthony-黄亮

    谈谈时区,日历,时间格式和国际化 国际化 不现国家和地区有不同的时间,表达习惯,程序需要尊重用户的这些习惯。这 […]...

  7. jsp页面九大内置对象 – 无信不立

    View Post jsp页面九大内置对象 资源转载自网上,不可用于商用,学习可以。内置对象又叫隐式对象/隐含 […]...

  8. 12.置信区间的构建 – 我不叫闹心

    12.置信区间的构建 估计总体统计量的第二种方法 是使用总体统计量的置信区间。这个方法得到的并非总体统计量的精 […]...

随机推荐

  1. 学习之道

      要对学习的效果加以周期性的反思。学习的目的在于获取知识和技能。学习的主要投入是时间。一个人对人类社会的贡献 […]...

  2. DFS深度优先算法学习

    DFS深度优先算法学习 刚开始学习算法,参考大佬博客还是有很多不明白的,于是一步步解析,写下笔记记录。 大佬博 […]...

  3. OSI七层模型与TCP/IP五层模型 – SevenFormer

    OSI七层模型与TCP/IP五层模型         博主是搞是个FPGA的,一直没有真正的研究过以太网相关的 […]...

  4. 30个极大提高开发效率的Visual Studio Code插件

    今天给大家分享一些VSCode的插件,这些看似花里胡哨的插件能极大的提高我们的开发效率,所以分享给大家,希望对 […]...

  5. 系统从初期到支撑亿级流量,都经历了哪些架构的变迁?

    写在前面 随着互联网的发展,互联网企业的业务也在不断的飞速发展,进而导致系统的架构也在不断的发生着变化。总体来 […]...

  6. 【软考】运筹学

    目录 1.水流问题 2.管道问题 以下是个人在学习过程中整理的软考运筹学错题 1.水流问题 题目: 某水库现在 […]...

  7. 三角函数基础知识

    1.角度与弧度的换算 180 度 = π 弧度 1 弧度 = 180 / π 度 1 度 =  π / 180 […]...

  8. 暑期 2021 | Serverless Devs 最全项目申请攻略来啦!

    今年,Serverless Devs 加入中国科学院软件研究所“开源软件供应链点亮计划”支持下的系列高校开源活 […]...

展开目录

目录导航