android什么叫匿名内部类,Android里面的匿名类与匿名内部类使用
在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里面的匿名类与匿名内部类使用相关推荐
- 【java笔记】Java中的匿名类和匿名内部类
匿名类和匿名内部类 匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类.其语法形式如下: new <类或接口>() {// 类的主体 }; 匿名类有两种实现方式: 继承一个 ...
- 1.18 Java匿名类,匿名内部类
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类.其语法形式如下: new <类或接口>() {// 类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个 ...
- java 内部匿名类_java匿名类和匿名内部类详解
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类.其语法形式如下:new() { //类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一 ...
- java 抽象类的匿名类_Java匿名内部类(通过继承抽象类来实现)
3. 匿名内部类 没有名字的内部类就是匿名内部类. 3.1 匿名内部类特性 1. 匿名内部类总是默认实现某个接口或继承某个抽象类. 2.不能有构造方法,只能有一个实例. 3. 不能定义在任何静态成员. ...
- 匿名类、内部类、匿名内部类
前端时间在写.net项目中,一直错将.cs里的两个class当作内部类,原来是一个文件里的两个类而已,这让我想起了Java中的内部类,比较内部类,那么还有两个类,那就是匿名类和匿名内部类.今天我想就J ...
- 对java中匿名对象和匿名类的简单理解
首先在写完这篇博客时感谢几位作者的文章: https://www.cnblogs.com/txbblog/p/10364558.html https://blog.csdn.net/chengqium ...
- 内部类(static内部类)的定义与使用、与子类、接口有关匿名类的定义与使用
内部类的定义: 在一个类中定义另一个类,这样的类称为内部类,而包含内部类的类称为外嵌类,所以内部类也是外嵌类的一种成员: 内部类要点: 1.外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用 ...
- android编译非静态内部类,Android 非静态内部类/匿名类引起的内存泄漏
一.概述 让我们先来回顾一下android内存泄漏的相关概念: 内存溢出:android系统会给每个安卓程序分配一定的内存,当程序所使用的内存超过最大值就会造成内存溢出,就是常说的OOM 内存泄漏:简 ...
- Android事件的响应,Android 开发事件响应之基于监听的事件响应
Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事 ...
最新文章
- 剑指offer 面试36题
- 模拟电路技术之基础知识(十)
- DCMTK:OFUUID测试程序
- UDP与TCP对比,TCP保证可靠性传输的详细说明
- jQuery 增加 删除 修改select option
- vue v-for循环的用法
- Git(4):提交代码时忽略不必要的文件或文件夹
- 摄影后期从入门到精通(一)
- android 的android httpClient详解
- SQL Server 创建链接服务器
- html邮件的排版问题
- fins协议握手信号服务器响应,欧姆龙OMRON PLC之HostLink通讯协议(四)-FINS命令工作模式篇...
- kk5.0 服务器信息,关于KK问题整理汇总,这个可以收藏!
- Unity3D 中动态更改材质球纹理
- [工作日志] LDAP的SHA加密方式--Java
- 联想Y470 非虚拟机安装苹果Mac OS X Mavericks 10.9.1教程详解(文字+图片),通俗易懂亲自动手——序列三之安装过程,设置选项
- 绝地求生大逃杀常用英语
- 如何为SharePoint文档库、文件夹、文件单独设置权限
- 【转】委外加工的核算流程
- MySQL引擎和区别
热门文章
- 中国联通无信号无服务器,我的联通流量卡,插手机里为何没信号,无服务呢?
- 在电脑搭建php系统,台式电脑一键重装系统后怎么搭建php网站
- vue脚手架基础API全面讲解【内附多个案例】
- 要小心了!被删除30天的iCloud备忘录仍可被恢复
- 为了进阿里需要做哪些准备(JVM篇)
- c++单例模式线程安全几种实现方式
- 应用于计算机的数学,对计算机技术应用于中小学数学教学的认识
- python matplotlib在一张画布上画多个图的两种方法,plt.subplot(),plt.subplots()。
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
- 「大话设计模式 - 解读」5 大作业