Android学习 匿名类与匿名内部类
来源:互联网 发布:php知名开源商城 编辑:程序博客网 时间:2024/05/17 23:43
转载自: http://www.cnblogs.com/avenwu/archive/2012/01/18/2325410.html
在android开发中经常碰到匿名类(和匿名内部类)的使用,那么匿名类和一般情况下使用的类有什么不同,从实现的功能来讲是一样的,但是使用匿名更加简洁方便,形式上有点像new一个接口或类的感觉,但是我们必须记住接口是不可以new出来的(实例化),我们要在内部重写需要的接口的方法,这样就new出了一个实现接口方法的对象,但是这个对象的类名不可见,所以叫做匿名类。下面是功能相同的两段代码,分别用上述两种写法。
匿名类
形式如下:new <类或接口> <类的主体>
1 button.setOnClickListener(listener );
2
3 private View.OnClickListener listener = new View.OnClickListener()
4 {
5 @Override
6 public void onClick(View v)
7 {
8 String phonenum = phoneEditText.getText().toString();
9 Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + phonenum));
10 startActivity(intent);
11 }
12 };// 在这里需要一个分号
自定义继承接口的类:
button.setOnClickListener(new ButtonListener());
private final class ButtonListener implements View.OnClickListener
{@Override
public void onClick(View v)
{
EditText mobileText = (EditText)findViewById(R.id.mobile);
String mobile = mobileText.getText().toString();
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
intent.setData(Uri.parse("tel:"+ mobile));
startActivity(intent);
}
}
匿名类不等同于匿名内部类,后者也经常使用,匿名内部类是内部类的一种,使用的时候更加简洁,但是不是任何情况下都需要使用。
在thinking in java 3th 是这么阐述的:
简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较
合适的:
·只用到类的一个实例。
·类在定义后马上用到。
·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、方法和类。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
//在方法中返回一个匿名内部类
public class Parcel6
{
public Contents cont()
{
return new Contents()
{
private int i = 11;
public int value()
{
return i;
}
}; // 在这里需要一个分号
}
public static void main(String[] args)
{
Parcel6 p = new Parcel6();
Contents c = p.cont();
}
自己理解:
匿名类:new 一个接口的同时,重写接口里的方法,如
new Thread(new Runnable(){
@override
public void run(){
}
}).start();
匿名内部类:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?需要满足上述条件
- Android学习 匿名类与匿名内部类
- Android里面的匿名类与匿名内部类使用
- Android里面的匿名类与匿名内部类使用
- Android里面的匿名类与匿名内部类使用
- Android里面的匿名类与匿名内部类使用
- Android里面的匿名类与匿名内部类使用
- Android里面的匿名类与匿名内部类使用
- Android里面的匿名类与匿名内部类使用
- android学习:匿名内部类
- 匿名类与内部类
- 匿名内部类学习
- 匿名类、内部类、匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类,内部类,匿名内部类
- 匿名类内部类
- 内部类-匿名类
- 内部类匿名类
- webgl学习笔记2--图形绘制的几个重要方法详解
- 【嵌入式Linux+ARM】ARM体系结构与编程(ARM概述)
- unity网络编程学习(4)与java服务器的Socket通信
- 论日本战国时代一石具体有多重
- 微信营销
- Android学习 匿名类与匿名内部类
- 可扩展性设计之数据切分
- 前端开发工程师是个什么样的职位?
- goagent AttributeError: can't set attribute
- Android使用SwipeMenuListView 高仿QQ、微信侧滑删除--详解
- hdoj 56 阶乘因式分解(一)
- 使用CodeBlocks编写OpenCL程序
- 4种必须知道的Android屏幕自适应解决方案
- JSTL 核心标签库(Core tag library)使用