Java提供的这个interface的语法,目的就是将接口从类中剥离出来,构成独立的主体。

首先加入我们定义了这个杯子接口:

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

interface当中,注意亮点:

1.不需要定义方法的主体

2.不需要说明的可见性(默认为public)

在一个的类中实施接口,例如下面的MusicCup

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

这里需要注意的就是:一旦在类中实施了某个interface,必须在该类中定义interface的所有方法(addWater()和drinkWater())。类中的方法需要与interface中的方法原型相符。否则,Java将报错。

interface接口存在的意义:

我们使用了interface,但这个interface并没有减少我们定义类时的工作量。我们依然要像之前一样,具体的编写类。我们甚至于要更加小心,

不能违反了interface的规定。既然如此,我们为什么要使用interface呢?

事实上,interface就像是行业标准。一个工厂(类)可以采纳行业标准 (implement interface),也可以不采纳行业标准。

但是,一个采纳了行业标准的产品将有下面的好处:

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

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

如果我们已经有一个Java程序,用于处理符合Cup接口的对象,比如领小朋友喝水。那么,只要我们确定,我们给小朋友的杯子(对象)实施了Cup接口,就可以确保小朋友可以执行喝水这个动作了。

至于这个杯子(对象)是如何具体定义喝水这个动作的,我们就可以留给相应的类自行决定 (比如用吸管喝水,或者开一个小口喝水)。

多个接口:

一个类可以实施不止一个接口interface。

例如我们还有一个interface:

interface Musicplayer
{
void play();
}

所以真正的MusicCup还需要实施这个接口,所以如下所示:

class MusicCup implements Cup, MusicPlayer
{
public void addWater(int w)
{
water = water + w;
} public void drinkWater(int w)
{
water = water - w;
} public void play()
{
System.out.println("dun...dun...dun...");
} private int water = 0;
}

就这些,好了附带一个源码大家看吧:

 interface Cup
{
void addWater(int w);
void drinkWater(int w);
} interface MusicPlayer
{
void play();
} /*这个类如果implements Cup了,那么Cup中定义的方法, 在MusicCup
中必须要有addWater和drinkWater,否则会报错,这点和c++不一样*/
class MusicCup implements Cup, MusicPlayer
{
public void addWater(int w)
{
water = water + w;
System.out.println("water is " + water);
} public void drinkWater(int w)
{
water = water - w;
System.out.println("water is " + water);
} public void play()
{
for (int i = 0; i <water; i++)
{
System.out.println("dun...dun...dun...");
}
} public int waterContent()
{
return water;
} private int water = 0;
} public class test
{
public static void main(String[] args)
{
MusicCup mycupCup = new MusicCup();
mycupCup.addWater(5);
mycupCup.play();
mycupCup.drinkWater(3);
mycupCup.play();
System.out.println("water content is " + mycupCup.waterContent());
}
}

输出结果:

water is 5
dun...dun...dun...
dun...dun...dun...
dun...dun...dun...
dun...dun...dun...
dun...dun...dun...
water is 2
dun...dun...dun...
dun...dun...dun...
water content is 2

【Java 基础篇】【第六课】接口interface的更多相关文章

  1. java基础解析系列(六)---深入注解原理及使用

    java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...

  2. java基础解析系列(六)---注解原理及使用

    java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer缓存及 ...

  3. 小白—职场之Java基础篇

    java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...

  4. 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇

    Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...

  5. java基础篇---HTTP协议

    java基础篇---HTTP协议   HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...

  6. java基础篇---I/O技术(三)

    接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...

  7. python基础篇(六)

    PYTHON基础篇(六) 正则模块re A:正则表达式和re模块案例 B:re模块的内置方法 时间模块time A:时间模块的三种表示方式 B:时间模块的相互转换 随机数模块random A:随机数模 ...

  8. java基础篇1

    JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...

  9. Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

  10. 2015年12月28日 Java基础系列(六)流

    2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流

随机推荐

  1. Visual Studio提示Bonjour backend初始化失败

    Visual Studio提示Bonjour backend初始化失败 错误信息:The Bonjour backend failed to initialize, automatic Mac Bui ...

  2. NGUI全面实践教程(大学霸内部资料)

    NGUI全面实践教程(大学霸内部资料)   试读文档下载地址:链接:http://pan.baidu.com/s/1jGosC9g 密码:8jq5 介绍:NGUI全面实践教程(大学霸内部资料)本书是国 ...

  3. 实践1-qq邮箱主页

    纯html的网页 采用table分割板块进行布局 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  4. 2015ACM/ICPC亚洲区长春站 E hdu 5531 Rebuild

    Rebuild Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total S ...

  5. python 代码片段6

    #coding=utf-8 # python常用的列表list和字符串string # tuple元组,一个身有残疾的只读列表 s='python' print s[0] print s[-1] # ...

  6. Designing CSS Layouts With Flexbox Is As Easy As Pie

    This article is an updated excerpt of the chapter “Restyle, Recode, Reimagine With CSS3″ from our Sm ...

  7. tableviewCell折叠状态2

    // //  LHQContentViewCell.h //  11 - 投资管理 - 李洪强 // //  Created by vic fan on 16/4/12. //  Copyright ...

  8. html5文章 -- 应用HTML5 开发手机APP

    因为HTML5暂时无法短期内在PC普及,主要方向在使用高端浏览器的高端移动设备,所以可以用作开发Android系统的App.但只有Android2.2以上.iOS3.2以上均支持HTML5,两大平台有 ...

  9. X-Japan

    听X Japan这么久,几位大叔还是没有认清,真是惭愧. X-Japan是日本著名的视觉系摇滚乐队.原来叫X,在1992年8月HEATH入团的同时改名为X JAPAN. 乐队成立于1982年1月,19 ...

  10. 使用mutt+msmtp在Linux命令行界面下发邮件

    mutt命令执行了却发送不了邮件, 搜索了一会才明白原来是mutt需要一个发信的程序, msmtp刚好是一个不错的选择. 1. apt-get install mutt msmtp (安装过程中会弹出 ...