Java基础05 实施接口(转载)
经过封装,产品隐藏了内部细节,只提供给用户接口(interface)。
interface
interfase Cup{
void addWater(int w);
void drinkWater(int w);
}
Cup这个interface中定义了两个方法的原型(stereotype): addWater()和drinkWater()。一个方法的原型规定了方法名,参数列表和返回类型。原型可以告诉外部如何使用这些方法。
在interface中,我们
- 不需要定义方法的主体
- 不需要说明方法的可见性
注意第二点,interface中的方法默认为public。正如我们在封装与接口中讲到的,一个类的public方法构成了接口。所以,所有出现在interface中的方法都默认为public。
我们可以在一个类的定义中实施接口,比如下面的MusicCup (可以播放音乐的杯子):
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 MusicPlayer(){
void play();
}
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;
}
Java基础05 实施接口(转载)的更多相关文章
- Java基础05 实施接口
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在封装与接口中,private关键字封装了对象的内部成员.经过封装,产品隐藏了内部 ...
- Java基础-通过POI接口处理xls
Java基础-通过POI接口处理xls 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Collection子接口之Set接口
Java基础-Collection子接口之Set接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学习Collection接口时,记得Collection中可以存放重复元素,也可 ...
- Java基础-Collection子接口之List接口
Java基础-Collection子接口之List接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们掌握了Collection接口的使用后,再来看看Collection接口中 ...
- 《Java基础——抽象与接口》
Java基础--抽象与接口 一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...
- java Vamei快速教程05 实施接口
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在封装与接口中,private关键字封装了对象的内部成员.经过封装,产品隐藏了内部 ...
- Java 基础三、接口与内部类
1. 在Java程序语言中,接口是对类的一种描述.例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口. public interface ...
- Java基础—抽象类和接口
1.抽象类 在Java语言中使用abstrac关键字来定义抽象类和抽象方法,抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号. public abstract class Employee { ...
- java基础(十三)之接口
接口 什么是接口? 生活中也有很多的接口,比如USB接口.定义了接口就是定义了调用对象的标准. 接口基本语法 1.使用interface定义:2.接口当中的方法都是抽象方法:因为抽象函数不能生成对象, ...
随机推荐
- NHibernate+MySql (erro 解决方法)
error1. Could not create the driver from NHibernate.Driver.MySqlDataDriver 解决方法:在使用Nhibernate连接Mysq ...
- sql-server-on-linux-how-i-think-they-did-it : Anthony Nocentino's Blog
http://www.sqlservercentral.com/blogs/anthony-nocentinos-blog/2016/11/21/sql-server-on-linux-how-i-t ...
- [HTML/CSS]uploadify自定义按钮样式
概述 在项目中经常用到uploadify上传插件,但是FLASH按钮的外观往往跟我们网页的设计的主题色不太搭配.这时就需要对其样式进行修改. 样式文件是uploadify.css. 打开这个文件后,你 ...
- jQuery--样式
Jquery(一)——样式篇1.$(document).ready 的作用是等页面的文档(document)中的节点都加载完毕后,再执行后续的代码, 因为我们在执行代码的时候,可能会依赖页面的某一个元 ...
- 手把手教你调试Entity Framework 6源码
0 摘要 本文讲述在Visual Studio 2013(VS 2013)下调试Entity Framework 6(EF 6)源码的配置过程.原则上,VS 2012也适用. 之前打算编写<E ...
- opengl中VAO,VBO,IBO用法小结(zz) 【转】
http://cowboy.1988.blog.163.com/blog/static/751057982014380251300/ opengl中VAO,VBO,IBO用法小结 这三个玩意全面取代旧 ...
- Vue基础知识总结(一)
一.基本语法: 1.实例化:new Vue({}) 2.el:一定是根容器元素(vue的作用域就是这个根元素内),就是写选择器 data:用于存储数据 methods:定义方法(方法里th ...
- 微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?
本文来自微信开发团队yanyang的技术分享. 1.引言 相信大家都遇到过一段特殊文本可以让iOS设备所有app闪退的经历.前段时间大年初一,又出现某个印度语字符引起iOS11系统奔溃,所幸iOS版微 ...
- openerp config file
[options] addons_path = /bin/openerp/addonsadmin_passwd = admincsv_internal_sep = , db_host = False ...
- /proc/meminfo详解 = /nmon analysis --MEM
memtotal hightotal lowtotal swaptotal memfree highfree lowfree swapfree memshared cached active bigf ...