JAVA里的匿名内部类在android中的应用

本文深入探讨了Java中匿名内部类的使用场景与实现原理,并对比了其与常规类定义方式的区别,强调了匿名内部类在简化代码方面的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[匿名内部类]

例子是这样的:
m_ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
//于对选中的项进行处理
DisplayToast("选中了第"+Integer.toString(arg2+1)+"项");
}

});
很有趣的是AdapterView.OnItemClickListener() 这是个接口,不是个类。那new居然可以用在它的前面,这样实现的对象,里面的onItemClick是实现了OnItemClickListener接口中的方法。

[原始写法]
如果把它还原成类的写法,即:
class Click implements AdapterView.OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
DisplayToast("选中了第"+Integer.toString(arg2+1)+"项");
}
};
m_ListView.setOnItemClickListener(new Click());
 这种把类单独写出来的方式显然更加直观,那为什么要用匿名内部类呢?为了简化代码,因为上面Click这种类和对象只会用到一次。

[总结]
 类是类,接口是接口
用new关键字,来操作一个接口后跟{}定义,其实是写了一个该接口的实现类。 语法:new 接口(){实现接口的函数}

另附:
内部类就是在一个类中嵌套了一个类,内部类中通常实现一些方法,匿名内部类一般android中用的很多,那么举例比如说类A实现了Runnable这个接口,应该知道实现这个接口执行里面run方法就是多线程。通常也许我们会 class A implements Runnable{              public void run(){执行多线程} } 这种情况我也可以这么写 Runnable A=new Runnable(){              public void run(){执行多线程} };(这里有分号) 我们知道接口是不能new的 , 那上面这种情况就是说在new一个接口的形式,但是这样写可别理解为在创建对象A,这里A可是一个类,只是没有通过最上面的写法,而是直接这样写得,那个run方法就是A类实现Runnable接口的重写方法,那么匿名内部类就是说把A去掉,让他没名字的类,比如 new Runnable(){              public void run(){执行多线程} };(这里有分号) 这样也是一个类,只是不知道名字,好比new A();创建对象没有引用一样,我们可以说匿名引用。 不懂追问即可,另祝平安夜快乐。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值