2012-04-02 76 views
1

如果我们在Java事件监听器添加到一个按钮,这样的:为什么我们调用直接添加侦听器作为内部类?

btn.setOnClickListener(new OnClickListener(){ 

public void onClick(View v) 
{ 
// Do smoething 
} 

}); 

这就是所谓的我们使用内部类,我有问题,在了解内部类的概念

不内部类是这样声明的?

class AOuter{ 
    int a=5; 

    class BInner{ 
     // do smothing 
    } 

} 

回答

4

的点击监听器是一个匿名内部类,另一种是只是一个内部类。它们都是nested classes

+0

+1但是他们都是内心阶层,OP在这方面是对的。 – biziclop 2012-04-02 21:24:14

+0

好,但为什么我们直到把它称为一个类,尽管我们正在使用'新',我们不是在这里创建一个对象吗?! – Bader 2012-04-02 21:42:13

+0

是的,我们创建了一个新对象,但该对象的类是一个新类。我们继承了'OneClicklistener',甚至可以添加新的方法 - 因此它是一个新的类。 – Andrejs 2012-04-02 21:45:32

0

您提供给setOnClickListener的类不能在其他地方实例化。它只作为该函数的参数,而第二个代码段中定义的类是嵌套的,并且可以正常实例化。

0

@Andrejs是正确的。人们使用匿名内部类来添加侦听器的原因通常是因为这是一次性的事情,您不会重用该操作/侦听器。但是,如果该聆听者/动作被计划重用,应该明确定义它以使其可重用。

相关问题