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的接口总结

时间: 2024-11-15 22:41:29

Java的接口总结的相关文章

java中接口中成员的定义

java中的接口的作用是提供编程框架,它作为统一的规范让其他类进行扩展,是java中非常优秀的设计. 这娃用以下代码总结了java中接口可以定义的成员以及它们默认被修饰的关键字: //外部接口的访问修饰符只能是public或默认修饰符 ,并且它的成员只能用public访问修饰符修饰, 接口不能用final修饰 public interface A { //成员变量,默认用public static final 修饰 String name="ahei"; //成员方法,默认用publi

java中接口的定义与实现

1.定义接口 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] interface 接口名 [extends 父接口名列表]{ [public] [static] [final] 常量; [public] [abstract] 方法; } 修饰符:可选,用于指定接口的訪问权限,可选值为public.假设省略则使用默认的訪问权限. 接口名:必选參数,用于指定接口的名称,接口名

java中接口的使用

我们虽然写了两个文件,但是,两个文件中我们都是用了一个包mah. 我们可以在类中调用接口,看下面的例子 这是一个接口 [[email protected] java]# vim Output.java package mah; public interface Output { public static final int MAX_CACHE_LINE = 120; public abstract void out(); public abstract void getData(String

内功心法 -- Java标记接口

写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------这篇博客主要来谈谈"Java标记接口"的相关知识,主要内容包括: 1. 概述 2. Serializable 3. Cloneable 4. RandomAccess --------------------------------------------------------------------1.概述 Ja

深入理解Java的接口和抽象类(转)

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.

java微信接口之四—上传素材

一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN 其中ACCESS_TOKEN是我们动态获取的. 发送的数据: {"articles":[ { "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXC

java微信接口之五—消息分组群发

一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN   其中ACCESS_TOKEN是我们动态获取的.   发送的数据:(这里使用图文消息示例) { "filter":{ "group_id":"2" }, "mpnews":{ "me

(转载)深入理解java的接口和抽象类

本文转自地址:http://www.cnblogs.com/dolphin0520/p/3811437.html 作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类

Java的接口和抽象类

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.

Java中接口和抽象类的比较

Java中接口和抽象类的比较-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计使用多态性的基础[[1]].(在面向对象语言中,接口的多种不同的实现方式即为多态.多态性是允许你将父对象设置成为和一个或更多的他的子对象的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4编程技术内幕").简单的说,就是一句话:允许将子类类型的