博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java的接口总结
阅读量:7065 次
发布时间:2019-06-28

本文共 2703 字,大约阅读时间需要 9 分钟。

        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。

        总结一次不易,转载请注明出处,感谢~

转载于:https://www.cnblogs.com/gavanwanggw/p/6911438.html

你可能感兴趣的文章
Confluence 6 空间
查看>>
lua-resty-http上传数据
查看>>
heartbeat+ldirectord实现web与dns的高可用性
查看>>
luacurl安装
查看>>
JBoss的配置
查看>>
软件测试之Web实战测试
查看>>
Tomcat的参数配置及一般问题的解决
查看>>
JAVA CAS原理深度分析
查看>>
O2O?啥是“呕吐呕”?
查看>>
百度的疯狂 UC的隐忍
查看>>
我的友情链接
查看>>
AGG第三十五课 gsv_text 渲染ASCII字符
查看>>
查找组成一个偶数最接近的两个素数
查看>>
不怕狼一样的敌人,就怕狗一样的朋友
查看>>
bash基础特性
查看>>
【连载】物联网全栈教程-从云端到设备(十二)---最简单的单片机上云方法!...
查看>>
如何自学编程?学习方法在这里!
查看>>
springboot web应用 jar 启动 ant脚本
查看>>
SolrCould 集群搭建
查看>>
IDEA Git版本回滚提交方式
查看>>