Java的接口总结
Java最主要的封装是class。除此之外还有接口interface。
这段时间一直在想接口有什么作用呢。有了接口有哪些优点呢。结合网络上各位大神的文章,接口的作用大概体如今下面几个方面。
1.回调
2.方法參数
3.多态
对于上面的结论,笔者自己也做了思考。而且概括为:接口是一种能力的声明或者说是一种能力的约束。从接口能力的引用方面来看,这个是能力的声明。要想被这个接口引用指向。你就必须具备某种能力。从接口的实现来看。这个就是能力的约束。一个对象可能有多个能力。可是被这个接口引用指向了之后。智能表现出这样的能力。以下就一些样例来说明一下自己的观点。
先说说第一个。接口与回调,这个样例太多了。就来看看android系统的点击响应实现吧。
Button button = new Button(this);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) { }
});
这里就是一个典型的回调场景。给方法传递了一个匿名内部类,实现了onlick的方法。假设直接就这么写,感觉就是赤裸裸的能力声明,必需要实现onlick方法。哪怕仅仅是一个空方法。当然你也能够这么写。button.setOnClickListener(this);给方法传递一个对象引用,这个对象实现了这个接口。当然这个对象也可能实现了很多其它的接口,比方以下的代码:
public class MainActivity extends Activity implements View.OnClickListener,
View.OnLongClickListener { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = new Button(this);
button.setOnLongClickListener(this);
button.setOnClickListener(this);
} @Override
public boolean onLongClick(View v) {
return false;
} @Override
public void onClick(View v) {
}
}
在这里就能感受到了能力的约束,this具有对长按。和短按的响应能力,可是在一个方法里面仅仅能展示出一个。
再说说接口用来做參数。样例就是上面的样例,setOnClickListener方法的參数类型就是一个接口。假设不用接口,也仅仅能用类了。类的话就有点笨重了,一个类仅仅有一个能力。
另外假设是类的话,那也不方便用button.setOnClickListener(this);这样的方式了。这样看来用接口确实是省了不少事情。
最后接口用来展示多态。这个和上面的确实不同了,得新举一个样例。
最经典的应该是工厂模式吧。
//定义接口
interface Car {
public void run();
public void stop();
} // 详细实现类
class Benz implements Car {
public void run() {
System.out.println("Benz開始启动了。 。。 。 。 ");
} public void stop() {
System.out.println("Benz停车了。。。 。 。 ");
}
} class Ford implements Car {
public void run() {
System.out.println("Ford開始启动了。 。。");
} public void stop() {
System.out.println("Ford停车了。。。。");
}
} // 工厂
class Factory {
public static Car getCarInstance(String type) {
Car c = null;
if ("Benz".equals(type)) {
c = new Benz();
}
if ("Ford".equals(type)) {
c = new Ford();
}
return c;
}
}
从这里看,car就是能力的声明,而且还有个传递这个能力的工厂,从这个工厂里面出来的每一个产品都具有run和stop两个功能。而做为实现接口的benz和ford两个类。也能够具有其它能力,比方benz能够在实现一个飞机接口,ford也能够多实现一个船的接口。这样当从car factory出来的时候就约束它仅仅给出了car的能力,从别的factory出来的时候就约束他有另外的能力。
个人觉得理解接口作用最好的地方是阅读Java容器系列接口。
比方Java提供了arraylist,linkedlist。hashmap等一些列优质容器。这个不过容器。他们能装非常多东西。各自有各自的长处和缺点。有木有发现,数据结构里面说的栈,队列在这里以接口的方式做了声明,比方Deque<E>, List<E>, Queue<E> 。
由于堆。栈不过一种能力的声明,先进先出。先进后出。只要实现了那几种能力就能够了。不关注你是怎么实现的。不关注你除了这个能力之外还有别的什么能力。所以我们能看到arraylist。linkedlist的都实现了好几个接口。API提供给外界訪问的方法,须要外界提供參数的时候,參数类型能够声明为list,这样假设你的数据常常有删除操作,你就能够用linkedlist,假设常常查找你就能够用arraylist。
总结一次不易,转载请注明出处,感谢~
Java的接口总结的更多相关文章
- 深入理解Java的接口和抽象类(转)
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- 深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- java微信接口之五—消息分组群发
一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_t ...
- java微信接口之四—上传素材
一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=A ...
- android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )
JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...
- [转载]深入理解JAVA的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- Java序列化接口的作用总结
一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 把堆内存中的对象的生命周期延长,存入硬盘,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了. ...
- 深入理解Java的接口和抽象类 _摘抄
http://www.cnblogs.com/dolphin0520/p/3811437.html 原文 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可 ...
- JAVA 函数式接口与c#委托对应关系(一)
C# Action委托 VS JAVA Action 接口函数 1.c#:Action 封装一个方法,该方法不具有参数并且不返回值. 构造实体类类 using System; namespace Ac ...
- java设计模式——接口模式
java将接口的概念提升为独立的结构,体现了接口与实现分离.java接口允许多个类提供相同的功能,也允许一个同时实现多个接口.java的接口与抽象类十分相似.java与抽象类中的区别: 1.一个类可以 ...
随机推荐
- Python 对Twitter tweet的元素 (Word, Screen Name, Hash Tag)的词汇多样性分析
CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-3 @author: guaguastd @name: tw ...
- HttpClient学习系列 -- 学习总结
jar包: HttpClient 4.x版本 简要介绍 HttpComponents 包括 HttpCore包和HttpClient包 HttpClient:Http的执行http请求 Default ...
- nyoj--118--修路方案(次小生成树)
修路方案 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...
- hdoj--2098--分拆素数和(枚举)
分拆素数和 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- Oracle 位图索引
内容简介: 1.位图索引 1.1位图索引使用注意事项; 1.2 使用位图索引; 1.3 位图索引对DML操作的影响; 2.位图连接索引 2.1 明确需求后使用位图索引; 2.1创建位图连接索引的注意事 ...
- 【BZOJ 1878】 HH的项链
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1878 [算法] 显然,在线算法是不可做的,考虑离线算法 笔者的做法是莫队算法,时间复 ...
- 比较不错的spring学习博客
http://blog.csdn.net/tangl_99/article/details/1176141
- SQLSERVER 链接服务器执行存储过程
1.创建链接服务器 exec sp_addlinkedserver 'server_tmp','','SQLOLEDB','192.168.1.1' -- server_tmp 为别名 exec sp ...
- Oracle学习系类篇(四)
.分析函数 分析函数oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组,然后计算基于组的邹忠统计值,并且每一组的每一行都可以返回一个统计值. 分析函数和聚合函数的不同之处 ...
- SQL纯手写创建数据库到表内内容
建表啥的只点点鼠标,太外行了,不如来看看我的纯手写,让表从无到有一系列:还有存储过程临时表,不间断的重排序: 一:建数据库 create Database Show on primary ( name ...