[匿名内部类]
例子是这样的:
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 接口(){实现接口的函数}
用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();创建对象没有引用一样,我们可以说匿名引用。 不懂追问即可,另祝平安夜快乐。