Java基础05 实施接口

转载 2018年04月14日 00:00:00

点击上方“Java团长”,选择“置顶公众号”

干货文章第一时间送达!


Java基础04 封装与接口中,private关键字封装了对象的内部成员。经过封装,产品隐藏了内部细节,只提供给用户接口(interface)


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


a cup in mind

 

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

 

interface



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


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


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


在interface中,我们


  • 不需要定义方法的主体

  • 不需要说明方法的可见性


注意第二点,interface中的方法默认为public。正如我们在Java基础04 封装与接口中讲到的,一个类的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;
}


分离接口的意义



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


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


  • 更高质量: 没有加水功能的杯子不符合标准。

  • 更容易推广: 正如电脑上的USB接口一样,下游产品可以更容易衔接。


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


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


相同的UNIX接口


实施多个接口



一个类可以实施不止一个的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类,运行一下。

 

总结



interface, method stereotype, public

implements interface

implements interface1, interface2


  • 原文:cnblogs.com/vamei/archive/2013/03/27/2982230.html

Java团长

每日分享Java干货

微信号:javatuanzhang

长按识别二维码

毕向东0705视频

  • 2016年05月09日 04:47
  • 55.89MB
  • 下载

07:矩阵归零消减序列和(1.8编程基础之多维数组)

07:矩阵归零消减序列和总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个n*n的矩阵(3 ...
  • qq_26919935
  • qq_26919935
  • 2017-09-05 20:49:21
  • 259

TIPTOP实施基础资料收集计划表

初版SOP文件整理计划(范例) TIPTOP权限建议表 整体基本资料收集计划表 制造基本资料收集计划表 制程工作站基本资料收集计划表 财务基本资料收集计划表 TIPTOP单别规划表 下载地址:http...
  • wahaa591
  • wahaa591
  • 2015-06-11 09:39:10
  • 547

java集合框架(一)——框架结构及基础接口

java.util包是一个重要的包,包含许多类和接口,它还包括java的一个功能强大的子系统——集合框架,集合框架是一个复杂接 口和类的层,提供了管理对象组的优化技术。 使用集合框架的目的有几个,...
  • qq_25934229
  • qq_25934229
  • 2017-04-20 15:50:45
  • 302

关于ESB实施的几点建议

作者 马国耀 前言 谈及企业服务总线(ESB),在有面向服务的架构(SOA)实施经验的开发者眼中一定不会陌生。这些年,人们一直在谈论它,以至有些人认为“实施SOA一定需要E...
  • zuoys
  • zuoys
  • 2013-07-03 14:19:09
  • 645

毕向东0805

  • 2016年05月09日 05:19
  • 28.96MB
  • 下载

Java基础复习笔记05数据结构-栈

  • 2011年05月08日 21:53
  • 176KB
  • 下载

java与stk集成应用

  • 2013年04月08日 07:49
  • 1.1MB
  • 下载

java集合类框架的基本接口有哪些

转自:牛客网 java集合类框架的基本接口有哪些? 答:Collection:代表一组对象,每一个对象都是它的子元素 Set:不包括重复元素的Collection List:有顺序的Col...
  • qq_18433441
  • qq_18433441
  • 2017-10-13 08:57:47
  • 2355

Java集合类框架的基本接口有哪些?

总共有两大接口:Collection 和Map ,一个元素集合,一个是键值对集合; 其中List和Set接口继承了Collection接口,一个是有序元素集合,一个是无序元素集合;而ArrayList...
  • yifanSJ
  • yifanSJ
  • 2018-01-18 10:15:40
  • 164
收藏助手
不良信息举报
您举报文章:Java基础05 实施接口
举报原因:
原因补充:

(最多只允许输入30个字)