java中匿名内部类解读分析
这段时间在看android,看到了java里面的匿名内部类,在印象当中.net里面不支持匿名内部类。
匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,如下所示:
new <类或接口> <类的主体>
这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
如:
- interface pr
- {
- void print1();
- }
- public class nonameclass
- {
- public pr dest()
- {
- return new pr(){
- public void print1()
- {
- system.out.println("hello world!!");
- }
- };
- }
- public static void main(string args[])
- {
- nonameclass c=new nonameclass();
- pr hw=c.dest();
- hw.print1();
- }
- }
pr也可以是一个类但是你外部调用的方法必须在你的这个类或接口中声明外部不能调用匿名类内部的方法
摘自:http://blog.sina.com.cn/s/blog_62ea4cf40100mubj.html
android中点击事件
button btn=(button)this.findviewbyid(r.id.button1);
btn.setonclicklistener(new button.onclicklistener(){
@override
public void onclick(view v) {
// todo auto-generated method stub
}
});
new 是建立一个 button.onclicklistener对象 ,后面一个 {}
表示这个括号中的操作作用于这个默认的对名象,而上面的java程序中后面是一个函数体。
这个用法的作用是:创建一个对象的实例,并且 override
它的一个函数。它是对 onclicklistener
接口的一个实现。
android多线程中
private runnable mrunnable = new runnable()
{
@override
public void run() {
// todo auto-generated method stub
try
{
thread.sleep(5000);
mhandler.sendmessage(mhandler.obtainmessage());
}
catch(interruptedexception e)
{
}
}
};
public handler mhandler = new handler()
{
public void handlemessage(message msg)
{
super.handlemessage(msg);
reflesh();
}
};