在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

{

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();

}

android什么叫匿名内部类,Android里面的匿名类与匿名内部类使用相关推荐

  1. 【java笔记】Java中的匿名类和匿名内部类

    匿名类和匿名内部类 匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类.其语法形式如下: new <类或接口>() {// 类的主体 }; 匿名类有两种实现方式: 继承一个 ...

  2. 1.18 Java匿名类,匿名内部类

    匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类.其语法形式如下: new <类或接口>() {// 类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个 ...

  3. java 内部匿名类_java匿名类和匿名内部类详解

    匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类.其语法形式如下:new() { //类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一 ...

  4. java 抽象类的匿名类_Java匿名内部类(通过继承抽象类来实现)

    3. 匿名内部类 没有名字的内部类就是匿名内部类. 3.1 匿名内部类特性 1. 匿名内部类总是默认实现某个接口或继承某个抽象类. 2.不能有构造方法,只能有一个实例. 3. 不能定义在任何静态成员. ...

  5. 匿名类、内部类、匿名内部类

    前端时间在写.net项目中,一直错将.cs里的两个class当作内部类,原来是一个文件里的两个类而已,这让我想起了Java中的内部类,比较内部类,那么还有两个类,那就是匿名类和匿名内部类.今天我想就J ...

  6. 对java中匿名对象和匿名类的简单理解

    首先在写完这篇博客时感谢几位作者的文章: https://www.cnblogs.com/txbblog/p/10364558.html https://blog.csdn.net/chengqium ...

  7. 内部类(static内部类)的定义与使用、与子类、接口有关匿名类的定义与使用

    内部类的定义: 在一个类中定义另一个类,这样的类称为内部类,而包含内部类的类称为外嵌类,所以内部类也是外嵌类的一种成员: 内部类要点: 1.外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用 ...

  8. android编译非静态内部类,Android 非静态内部类/匿名类引起的内存泄漏

    一.概述 让我们先来回顾一下android内存泄漏的相关概念: 内存溢出:android系统会给每个安卓程序分配一定的内存,当程序所使用的内存超过最大值就会造成内存溢出,就是常说的OOM 内存泄漏:简 ...

  9. Android事件的响应,Android 开发事件响应之基于监听的事件响应

    Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事 ...

最新文章

  1. 剑指offer 面试36题
  2. 模拟电路技术之基础知识(十)
  3. DCMTK:OFUUID测试程序
  4. UDP与TCP对比,TCP保证可靠性传输的详细说明
  5. jQuery 增加 删除 修改select option
  6. vue v-for循环的用法
  7. Git(4):提交代码时忽略不必要的文件或文件夹
  8. 摄影后期从入门到精通(一)
  9. android 的android httpClient详解
  10. SQL Server 创建链接服务器
  11. html邮件的排版问题
  12. fins协议握手信号服务器响应,欧姆龙OMRON PLC之HostLink通讯协议(四)-FINS命令工作模式篇...
  13. kk5.0 服务器信息,关于KK问题整理汇总,这个可以收藏!
  14. Unity3D 中动态更改材质球纹理
  15. [工作日志] LDAP的SHA加密方式--Java
  16. 联想Y470 非虚拟机安装苹果Mac OS X Mavericks 10.9.1教程详解(文字+图片),通俗易懂亲自动手——序列三之安装过程,设置选项
  17. 绝地求生大逃杀常用英语
  18. 如何为SharePoint文档库、文件夹、文件单独设置权限
  19. 【转】委外加工的核算流程
  20. MySQL引擎和区别

热门文章

  1. 中国联通无信号无服务器,我的联通流量卡,插手机里为何没信号,无服务呢?
  2. 在电脑搭建php系统,台式电脑一键重装系统后怎么搭建php网站
  3. vue脚手架基础API全面讲解【内附多个案例】
  4. 要小心了!被删除30天的iCloud备忘录仍可被恢复
  5. 为了进阿里需要做哪些准备(JVM篇)
  6. c++单例模式线程安全几种实现方式
  7. 应用于计算机的数学,对计算机技术应用于中小学数学教学的认识
  8. python matplotlib在一张画布上画多个图的两种方法,plt.subplot(),plt.subplots()。
  9. 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
  10. 「大话设计模式 - 解读」5 大作业