java内部类的作用(三)----定义使用回调函数的时候比较便捷---匿名内部类(anonymous)
来源:互联网 发布:java tar.gz循环解压 编辑:程序博客网 时间:2024/06/08 12:31
首先我们需要了解什么叫匿名内部类:定义(JAVA核心技术上是这样说的)
匿名内部类(anonymous inner calss):将局部内部类的使用再深入一步。假如只创建这个类的一个对象,就不必命名了。这种类被称为匿名内部类。
话很少,说的也很浅显,可能读完了还不知道什么叫匿名内部类?是的,确实有这种感觉,
重点就两个:
1.只创建这个类的一个对象;->这个是从局部内部类中延伸来的,整个代码中只有一次创建,没有说明什么
2.不必命名:->匿名内部类是没有名字的。【重点就是这里了,没有名字】
一个类没有名字?那是怎么样去创建这个类呢?
我们知道创建类是需要用到一个构造器的,构造器的名字与类名是同名的。
现在匿名内部类没有名字,肯定用不了构造器的。也就是说匿名内部类一定没有构造器的。
这里就告诉我们,是不是所有的类都有构造器呢,不一定,匿名内部类不能有构造器!
1.利用接口
换句话说,我们构造匿名内部类是没有参数的,或者把参数直接传递给超类的构造器的,想想,这在什么中用到呢?
接口!!!(构造的时候没有参数)
实现接口的时候我们是不能有任何构造参数的。接口里面的是只声明不实现。
对的,我们要想用到匿名内部类,必须要实现一个接口!!!
new InterfaceType(){
methods and data
}
我们来看看代码是怎么实现的:
package org.innerclass.operate;public class AnonymousClassTest {public static void main(String[] args) {// TODO Auto-generated method stubAnonymousClassTest test =new AnonymousClassTest();test.start();}public void start(){A a = new A(){@Overridepublic void print() {// TODO Auto-generated method stubSystem.out.println("我是利用接口来实现匿名内部类的!");}};a.print();}//定义一个接口public interface A{public void print();}}
如果你写过Android应用程序的时候,我们都经常用到这个匿名内部类:
当我们写一个按钮点击事件的时候,我们通常这样做:
list.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub } });
当然如果我们视图上有多个按钮的话,为了方便代码的管理,我们的参数都是this,然后让activity去实现OnClickListener 如下:
public class MainApp extends Activity implements OnClickListener
下面我就不再赘述了。
2.利用一个类
如果要使用的这个内部类有参数怎么办呢?难道匿名内部必须不能传递参数吗?不是的,我们可以把参数传递给超类的。
new SuperType(construction parameters){
inner calss methods and data
}
接下来我们看看代码是怎么弄的:
首先定义一个类:
package org.innerclass.operate;public class Duck {private String name;public Duck(String name) {this.name = name;}public String getName() {return name;}public void speak(){}}
匿名内部类使用一个类来实现:
package org.innerclass.operate;public class AnonymousClassTest {public static void main(String[] args) {// TODO Auto-generated method stubAnonymousClassTest test =new AnonymousClassTest();test.end();}public void end(){Duck superduck = new Duck("Donald Duck"){public void speak(){System.out.println("我是一只会说话的鸭子,你知道我叫什么吗?");System.out.println("我是唐老鸭,你是不是在1秒内想到 我呢?");}};superduck.speak();}}
结果:
我是一只会说话的鸭子,你知道我叫什么吗?我是唐老鸭,你是不是在1秒内想到 我呢?
就这样匿名内部类就是这些了,希望对你有帮助!
转载请注明!
- java内部类的作用(三)----定义使用回调函数的时候比较便捷---匿名内部类(anonymous)
- java 匿名内部类(Anonymous Class)
- java回调函数(采用匿名内部类)
- java局部内部类和匿名内部类的比较
- 内部类实现方式的比较(匿名内部类,局部内部类)
- 内部类、匿名内部类的使用
- Java中匿名内部类的作用
- 匿名内部类的作用
- Java内部类(三)匿名内部类
- java的内部类、匿名内部类、局部内部类
- JAVA内部类 (成员内部类、局部内部类、匿名内部类、静态内部类、内部类的继承))
- JAVA内部类 (成员内部类、局部内部类、匿名内部类、静态内部类、内部类的继承))
- java 内部类、匿名内部类、嵌套类的使用
- java静态内部类和匿名内部类的使用
- java中的内部类和匿名内部类的使用
- java 回调函数与匿名内部类
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- java-内部类的 定义 作用 例子
- 关于JSP适配手机的问题
- 集体智慧编程第二章学习笔记
- php简单的下拉菜单
- 10391 - Compound Words
- LeetCode Plus One
- java内部类的作用(三)----定义使用回调函数的时候比较便捷---匿名内部类(anonymous)
- |未公开的提示框能实现弹出消息自动关闭|
- 【机器学习】关联规则分析(一):Apriori
- 数据结构与算法之递推算法 C++与PHP实现
- TabHost、页签
- 获取Android的开发模式的sha1值
- 三角形判断
- 数字图像处理技术
- GCD深入理解(二)