原文网址:http://www.3g-edu.org/Android_free/art115.htm

Android应用程序采用Java语言编写,Java语法和C/C++有很大的相似性,但也有一些特别之处。Android中Interface的使用,从名字上看,Interface即为接口的意思,多用于实现回调(Call Back)方法。在Interface的定义中,一般的代码架构如代码清单1-1所示。

代码清单1-1 InterfaceServer.java

public class InterfaceServer {
      public interface OnClickListener{
        public void onClick();
      }
      private OnClickListener mOnClickListener=null;
      public void onClick(){
        if(mOnClickListener!=null)
        mOnClickListener.onClick();
      }
      public void setOnClickListener(OnClickListener l){
        mOnClickListener = l;
      } 
    }

对于Interface内部的方法而言,只需要声明,而不需要具体实现。从编译器的角度来看,Interface会被认为是一个指向方法的指针。

使用InterfaceServer的代码一般如代码清单1-2所示。

代码清单1-2 使用InterfaceServer

public void addToButton {
      Button b = (Button)findViewById(R.id.button);
      onClickListener l = new OnClickListener(){
        public void onClick(View v){
          TextView tv1 = (TextView) findViewById(R.id.tv1);
          tv1.setText("The Button has been clicked");
        }
      };
      b.setOnClickListener(l);
    }

Interface和Class的区别?

Interface接口:可以理解成一种特殊的类,由常量和抽象方法组成的特殊类;接口不可以实例化;接口中的方法没有方法体;继承接口的类一定要实现接口中定义的方法。

Class类:可以实例化;可以定义自己的字段,属性,方法等;类可以实现多个接口,但只能继承一个类。

"interface"(接口)关键字使抽象的概念更深入了一层。我们可将其想象为一个"纯"抽象类。它允许创建者规定一个类的基本形式:方法名、自变量列表以及返回类型,但不规定方法主体。接口也包含了基本数据类型的数据成员,但它们都默认为static和final。接口只提供一种形式,并不提供实施的细节。

接口这样描述自己:"对于实现我的所有类,看起来都应该象我现在这个样子"。因此,采用了一个特定接口的所有代码都知道对于那个接口可能会调用什么方法。这便是接口的全部含义。所以我们常把接口用于建立类和类之间的一个"协议"。有些面向对象的程序设计语言采用了一个名为"protocol"(协议)的关键字,它做的便是与接口相同的事情。

为创建一个接口,请使用interface关键字,而不要用class。与类相似,我们可在interface关键字的前面增加一个public关键字(但只有接口定义于同名的一个文件内);或者将其省略,营造一种"友好的"状态。

为了生成与一个特定的接口(或一组接口)相符的类,要使用implements(实现)关键字。我们要表达的意思是"接口看起来就象那个样子,这儿是它具体的工作细节"。除这些之外,我们其他的工作都与继承极为相似。

Android中定义接口的用法

原文网址:http://my.oschina.net/onlytwo/blog/39193?_t_t_t=0.5366520080270247

1、接口方法用于回调 (这里定义接口是为了使用其接口方法):

public interface ICallback {
public void func();
} public class Caller {
ICallback callback;
public void doCallback() {
callback.func();
} public void setCallback(ICallback callback) {
this.callback = callback;
} } public class MainClass {
public MainClass() {
} public static void main(String[] args) {
Caller caller = new Caller();
caller.setCallback(new ICallback () {
public void func() {
System.out.println("dosth");
}
});
caller.doCallback();
}
}

2、向上转型

interface People{
void peopleList();
}
class Student implements People{
public void peopleList(){
System.out.println("I’m a student.");
}
}
class Teacher implements People{
public void peopleList(){
System.out.println("I’m a teacher.");
}
}
public class Example{
public static void main(String args[]){
People a; //声明接口变量
a=new Student(); //实例化,接口变量中存放对象的引用
a.peopleList(); //接口回调
a=new Teacher(); //实例化,接口变量中存放对象的引用
a.peopleList(); //接口回调
}
}
运行结果:
I’m a student.
I’m a teacher.

【转】Android Interface的使用的更多相关文章

  1. Android AIDL[Android Interface Definition Language]跨进程通信

    全称与中文名IPC:Inter-Process Communication(进程间通信)Ashmem:Anonymous Shared Memory(匿名共享内存)Binder:Binder(进程间通 ...

  2. Android探索之AIDL实现进程间通信

    前言: 前面总结了程序间共享数据,可以使用ContentProvider也可以使用SharedPreference,那么进程间怎么共享内存呢?Android系统中的进程之间不能共享内存,因此,需要提供 ...

  3. Android开发学习—— Service 服务

    Service运行于后台的一个组件,用来运行适合运行在后台的代码,服务是没有前台界面,可以视为没有界面的activity. 服务可以被手动关闭,不会重启,但是如果被自动关闭,内存充足就会重启. sta ...

  4. android Service介绍

    一.简介 android中service(服务)运行于后台,没有界面.和其他组件一样,service也运行在主线程中,因此不能用它来做耗时的请求或者动作.可以在服务中开启线程,在线程中做耗时操作.可以 ...

  5. Android基础总结(八)

    服务两种启动方式(掌握) startService 开始服务,会使进程变成为服务进程 启动服务的activity和服务不再有一毛钱关系 bindService 绑定服务不会使进程变成服务进程 绑定服务 ...

  6. Android中AIDL的理解与使用(一)——跨应用启动/绑定Service

    AIDL(Android Interface Definition Language)--安卓接口定义语言 一.startService/stopService 1.同一个应用程序启动Service: ...

  7. Android探索之Service全面回顾及总结

    什么是Service? Service(服务)是Android提供的四大组件之一,是一个没有用户界面的在后台运行执行耗时操作的应用组件.其他应用组件能够启动Service,并且当用户切换到另外的应用场 ...

  8. Android 面试题汇总

    面试题基础储备 1.Activity相关 a.Activity的特点 1.可见  2.可交互 他之所以可交互,是因为他同时实现了Window.Callback和KeyEvent.Callback, 可 ...

  9. android 四大组件之---Service

    服务 服务的生命周期 --- 1 开启服务的生命周期 完整的生命周期:onCreate()-->onStartCommand()-->onDestroy() * 开启服务:onCreate ...

随机推荐

  1. Windows X64 Patch Guard

    先简单介绍下PatchGuard ,摘自百度百科 PatchGuard就是Windows Vista的内核保护系统,防止任何非授权软件试图“修改”Windows内核,也就是说,Vista内核的新型金钟 ...

  2. servlet学习笔记二

    Servlet主要内容: 1)表单处理 2)乱码问题 3)页面跳转 4)生命周期 一.表单处理 Servlet获取表单数据 request.getParameter():通过表单参数名获取参数值 re ...

  3. IE9 JSON未定义

    原文:http://social.msdn.microsoft.com/Forums/ie/en-US/fc41127c-0243-4d2e-8e7c-2b311f12e390/ie9-json-no ...

  4. javamail邮件中插入图片

    转载 http://duanmumu.blog.163.com/blog/static/1911133502012715104016481/ // TODO Auto-generated method ...

  5. 为什么要关闭360云盘:新来的美工嫌我们logo太丑,所以就决定关闭了。这个理由怎么样

    新来的美工嫌我们logo太丑,所以就决定关闭了.这个理由怎么样曾经拥有的不要忘记:不能得到的更要珍惜:属于自己的不要放弃:已经失去的留作回忆.我刚来~~~嘿嘿~~ 久经考验的,忠诚的国际宅男主义战士, ...

  6. Dire Wolf ---hdu5115(区间dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题意:有一排狼,每只狼有一个伤害A,还有一个伤害B.杀死一只狼的时候,会受到这只狼的伤害A和这只 ...

  7. swift:Optional Type 、Swift和Objective-C混编的讲解

    ❤️❤️❤️swift中的Optional Type的?和!含义:其实就是一个装包和拆包的过程 optional的含义: Optional事实上是一个枚举类型,Optional包含None和Some两 ...

  8. HtmlHelper

    HtmlHelper类 public class HtmlHelper<TModel> : HtmlHelper类 因为HtmlHelper<TModel>继承自HtmlHel ...

  9. C# 数组、一维数组、二维数组、多维数组、锯齿数组

    C#  数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ...

  10. 使用 .gitignore来忽略某些文件【转】

    转自:http://www.cnblogs.com/shangdawei/archive/2012/09/08/2676493.htmlhttp://blog.csdn.net/richardyste ...