Java基础第五篇 实施接口

目录
  • 1、interface
  • 2、分离接口的意义
  • 3、实施多个接口
  • 4、总结

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

接口是非常有用的概念,可以辅助我们的抽象思考。在现实生活中,当我们想起某个用具的时候,往往想到的是该用具的功能性接口。比如杯子,我们想到加水和喝水的可能性,高于想到杯子的材质和价格。也就是说,一定程度上,用具的接口等同于用具本身。内部细节则在思考过程中被摒弃。

publicprivate的封装机制,我们实际上同时定义了类和接口,类和接口混合在一起。Java还提供了interface这一语法。这一语法将接口从类的具体定义中剥离出来,构成一个独立的主体。

1、interface

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

interface 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 int waterContent()
    {
        return this.water;
    }

    private int water = 0;
}

2、分离接口的意义

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

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

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

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

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

相同的UNIX接口:

3、实施多个接口

一个类可以实施不止一个的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;
}

最后,可以尝试将本文中的interface和类定义放在同一个文件中,并编写Test类,运行一下。

4、总结

interface, method stereotype, public

implements interface

implements interface1, interface2

到此这篇关于Java基础第五篇 实施接口的文章就介绍到这了,更多相关Java实施接口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java Clone接口和深拷贝详解

    对于数组的拷贝,如果是简单类型的话是深拷贝,如果是引用类型的话是浅拷贝,但是因为java是面向对象的,在回答面试官问题的时候,我们可以不用说的这么细,可以直接说浅拷贝. 代码示例1 class Person implements Cloneable{//如果想克隆自定义类,那么需要在自定义类上实现Cloneable接口 public int age; /*疑问:为什么这个接口是空接口呢?这是一个面试问题. 空节课:也把它叫做标记接口.其实就是这个意思:只要一个类实现了这个接口,那么就标记这个类是

  • JAVA抽象类,接口,内部类详解

    目录 一.内容 抽象类 抽象方法与抽象类 抽象类的使用 接口 接口的概念 接口的定义 接口中的成员变量 接口中的方法 接口的继承 接口的实现/使用 接口与抽象类的差异 面向接口编程 内部类 非静态内部类 静态内部类 局部内部类 匿名内部类 总结 一.内容 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用于描述这个类的行为.但在某些情况下只需要定义出一些方法,而不需要具体的去实现这些行为.也就是说这些方法没有方法体,只是一些签名而已,这样的方法被称为抽象方法,包含抽象方法的类被称为抽象

  • Day11基础不牢地动山摇-Java基础

    目录 1.Eclipse开发工具 1.1 Eclipse历史 1.2 快捷键 1.3 Debug调试 1.4 JUNIT测试工具 2.Java基础新特性 2.1 可变参数 2.2 foreach输出 2.3 静态导入 3. JDK三大主要特性--泛型 3.1 泛型的引出 3.2 泛型实现 3.3 通配符 3.4 泛型接口 3.5 泛型方法 4.JDK三大主要特性--枚举 4.1 多例与枚举 4.2 Enum类 面试题:请解释enum和Enum的区别? 4.3 枚举中定义其它结构 4.4 枚举应用

  • Java List接口的集合使用详解

    目录 ArrayList集合 LinkedList类 LinkedList与ArrayList的区别: 总结 List接口继承collection接口,此接口可以对列表中的每个元素精确的控制,可以根据元素的索引来获取列表中的值,下面介绍常用的几种,ArrayList,LinkedList. ArrayList集合 ArrayList是一个动态修改的数组,它没有固定的大小,不需要自己分配空间,java本身已经初始化容量为10的大小,可以直接添加删除等一系列操作. ArrayList构造方法: Ar

  • 详细介绍Java函数式接口

    目录 Java-函数式接口 1.自定义函数式接口 1.1概述 1.2格式 1.3@FunctionalInterface注解 1.4自定义函数式接口 2.函数式编程 2.1Lambda的延迟执行 2.2使用Lambda作为参数和返回值 3.常用函数式接口 3.1Supplier接口 3.2Consumer接口 3.3Predicate接口 3.4Function接口 Java-函数式接口 1.自定义函数式接口 1.1概述 函数式接口在Java中是指:**有且仅有一个抽象方法的接口.**当然接口中

  • java调用Restful接口的三种方法

    目录 1,基本介绍 2,HttpURLConnection实现 3.HttpClient实现 4.Spring的RestTemplate 1,基本介绍 Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多, 本次介绍三种: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring的RestTemplate 2,HttpURLConnection实现 @Controller public class RestfulAction { @Aut

  • java的接口解耦方式

    目录 java的接口解耦方式 举例子 java接口解耦效果的理解 先看一段代码 java的接口解耦方式 我只想把抽象的东西说的具体,或者说,听起来简单些,明白些... 学过java的人都知道,java是单继承的,也就是说一个class只能继承一个类. 例如我们想制作一台有播放器的手机,那么我们先得制作一个播放器吧,再把播放器放进手机里.在java会怎么实现呢?如果使用继承,我们会先创建一个播放器类,播放器类里面含有播放歌曲功能(方法),创建一个手机类继承播放器类,重写播放器的播歌功能(不重写的话

  • Java中详细解析Map接口

    目录 Map详解: Map基本操作: hashMap原理: Put方法: Get方法: Map的遍历: TreeMap LinkedHashMap: 对比下Hashmap.Hashtable和ConcurrentHashmap: 总结 Map详解: 先看图,便于宏观了解Map的地位. Map接口中键和值一一映射. 可以通过键来获取值. 给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值. 当访问的值不存在的时候,方法就会抛出一个NoSuchElementEx

  • Java多态性抽象类与接口细致详解

    目录 1.多态性 1.1 向上转型 1.2 向下转型 2.抽象类 2.1 抽象类的基本概念 3.接口 3.1 接口的基本概念 3.2 接口的使用限制 3.3 使用接口定义标准 3.4 抽象类与接口的区别 1.多态性 多态性是面向对象的最后一个特征,它本身主要分为两个方面: ​ 方法的多态性:重载与覆写 ​ 1 重载:同一个方法名称,根据参数类型以及个数完成不同功能: ​ 2 覆写:通一个方法,根据操作的子类不同,所完成的功能也不同. ​ 对象的多态性:父子类对象的转换. ​ 1 向上转型:子类对

  • Java基础第四篇 封装与接口

    目录 1.封装与接口 2.对象成员的封装 3.类的封装 4.总结 前言: 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对象可以有状态和动作,即数据成员和方法. 到现在为止,数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对象的数据成员和方法. 1.封装与接口 封装(encapsulation)是计算机常见的术语,

随机推荐