【转】Android Interface的使用
原文网址: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的使用的更多相关文章
- Android AIDL[Android Interface Definition Language]跨进程通信
全称与中文名IPC:Inter-Process Communication(进程间通信)Ashmem:Anonymous Shared Memory(匿名共享内存)Binder:Binder(进程间通 ...
- Android探索之AIDL实现进程间通信
前言: 前面总结了程序间共享数据,可以使用ContentProvider也可以使用SharedPreference,那么进程间怎么共享内存呢?Android系统中的进程之间不能共享内存,因此,需要提供 ...
- Android开发学习—— Service 服务
Service运行于后台的一个组件,用来运行适合运行在后台的代码,服务是没有前台界面,可以视为没有界面的activity. 服务可以被手动关闭,不会重启,但是如果被自动关闭,内存充足就会重启. sta ...
- android Service介绍
一.简介 android中service(服务)运行于后台,没有界面.和其他组件一样,service也运行在主线程中,因此不能用它来做耗时的请求或者动作.可以在服务中开启线程,在线程中做耗时操作.可以 ...
- Android基础总结(八)
服务两种启动方式(掌握) startService 开始服务,会使进程变成为服务进程 启动服务的activity和服务不再有一毛钱关系 bindService 绑定服务不会使进程变成服务进程 绑定服务 ...
- Android中AIDL的理解与使用(一)——跨应用启动/绑定Service
AIDL(Android Interface Definition Language)--安卓接口定义语言 一.startService/stopService 1.同一个应用程序启动Service: ...
- Android探索之Service全面回顾及总结
什么是Service? Service(服务)是Android提供的四大组件之一,是一个没有用户界面的在后台运行执行耗时操作的应用组件.其他应用组件能够启动Service,并且当用户切换到另外的应用场 ...
- Android 面试题汇总
面试题基础储备 1.Activity相关 a.Activity的特点 1.可见 2.可交互 他之所以可交互,是因为他同时实现了Window.Callback和KeyEvent.Callback, 可 ...
- android 四大组件之---Service
服务 服务的生命周期 --- 1 开启服务的生命周期 完整的生命周期:onCreate()-->onStartCommand()-->onDestroy() * 开启服务:onCreate ...
随机推荐
- NodeJS路径的小问题
今天从新过了一边node的基础知识,自己写了一个小例子: foo.js exports.setSome = function (x) {return x }; saveData.js /** * Cr ...
- 网络安装之Redhat衍生版
GNU/Linux开源,这个意义实在是非常的广泛,目前在distrowatch上表现活跃的300个发行版代表了GNU/Linux的主流,然而细心的Linux爱好者会发现CentOS-based dis ...
- linux 中permission denied的问题:
执行安装命令的时候 ./install 遇到 permission denied, bash: ./install: Permission denied另外,在 root下也是同样的问题, 请教该如何 ...
- android+apimonitor+genymotion
1. 安装genymotion: http://www.genymotion.net/ 2. 设置使用adb Setting--adb--选择sdk的目录 3. apimonitor https:// ...
- php ++a和a++
<?php$a=$b=5;$a+$b=$a++-++$b;echo $b;?> 输出-1
- C中调用LUA回调(LUA注册表)
实现原理: 通过将LUA中得回调函数存入LUA注册表中来保存LUA函数,然后在需要回调时从LUA注册表中取出LUA函数进行调用 下面是一些预备知识:(学习两个重要的函数) 原汁原味的英文解释的最透彻, ...
- python list删除元素 del remove
L=[5,4,3,2,1,'abc'] del 按照index删除比如: del L[i] del L[i:j] remove按照内容删除 L.remove('abc') L.remove(0)#会报 ...
- USACO Section 3.2: Sweet Butter
这题我自己是用邻接矩阵+dijskstra方法来求的,第九个例子TLE.网上看了别人的代码,是用邻接表+BFS来完成. 这里可以学到两个小技巧,邻接表的表示方法和INT_MAX的表示方法. /* ID ...
- 用任务管理器画CPU正弦曲线
这个最初是在microsoft的<编程之美>中看到的,用你的程序来控制CPU的使用率. 首先是要求写一个用来实现CPU使用率为50%程序. 这个还是很好实现的,只要让你的程序忙的时间课空闲 ...
- Hibernate下的Many-to-Many的级联删除
hibernate下的Many-to-Many的级联删除 Hibernate多对多的例子不少,但仔细一看,大多数都是保存的,删除谈的少,但问题还不少,因此有必须简单测试一下,以下我们来个简单的多对多关 ...