原文网址: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. VS2003 下GridControl的列显示成图片+文字的形式实现

    public RC_CustomerSolicitListUC() { // 该调用是 Windows.Forms 窗体设计器所必需的. InitializeComponent(); // TODO: ...

  2. HDU 4169 树形DP

    Wealthy Family Problem Description While studying the history of royal families, you want to know ho ...

  3. JS异步加载的三种方式

    js加载的缺点:加载工具方法没必要阻塞文档,过得js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作. 有些工具方法需要按需加载,用到再加载,不用不加载,. 默认正常 ...

  4. 几个Unicode新知识:扩展ANSI有很多种(256个字符),Unicode表示ANSI字符时高字节为0,Unicode不包括古代字符

    都是有些模糊的概念,特别是Unicode不包括古代字符让我有点惊讶.看来Unicode只适用于大多数情况,一旦有无法表示的字符,那该怎么办呢? ANSI针对英语设计的,当处理带有音调标号(形如汉语的拼 ...

  5. nasm fasm yasm 还是masm、gas

    留个爪,稍后学习 选择编译器nasm?fasm?yasm?还是masm.gas或其他? 前面三个是免费开源的汇编编译器,总体上来讲都使用Intel的语法.yasm是在nasm的基础上开发的,与nasm ...

  6. 【解惑】让人头疼的"相等"关系

    Java中判断相等关系一般有两种手段:(1) “==”关系操作符  (2) equals()方法. 显然,基本数据类型变量之间只能用"==".而对象之间两种手段都是合法的.但是有很 ...

  7. linux下安装配置DHCP服务器

    前提是已经安装了 core 及 base 两个组 1 2 3 4 5 # cat /etc/redhat-release   Red Hat Enterprise Linux Server relea ...

  8. python流程控制语句 ifelse - 4

    嵌套 #! /usr/bin/python a = int(input ("请输入一个整数:")) : : print ("无法显示") else : prin ...

  9. protobuf php

    关于protobuf php,版本不知哪个好: https://github.com/yuangu/pb4php https://github.com/drslump/Protobuf-PHP htt ...

  10. javascript QUnit 单元测试

    <!doctype html> <html> <head lang="zh-CN" dir="ltr"> <meta ...