2012-09-08 40 views
3

我正在学习java swing,并且遇到了匿名内部类的概念。在研究了一下这个link后,我觉得匿名内部类必须总是扩展一些其他的类,因为它作为参数传递的方法是预定义的。至多,如果一个方法接受Object实例作为参数,那么我们只能创建一个匿名的独立内部类。我只是寻求你的意见,我是否正确。如果你能提供一些例子,这将是有帮助的。 在此先感谢。匿名内部类必须扩展一些超类?

+0

所以我得到的是匿名内部类只能是用于覆盖其超类的方法。 –

回答

1

创建匿名内部类而不扩展任何内容基本上意味着你没有办法与之交谈。

您需要扩展一个类或实现一个接口,以便为您的对象提供已知的方法进行交谈,例如;

myButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
     // do something here. 
    } 
}); 

去跟那个对象的实例的唯一方法是通过已知的ActionListener方法(这恰好是完全addActionListener方法,需要的方法),你会添加任何其他的方法就只能是访问对象本身。如果你不需要扩展/实现任何东西,任何方法都不能从外部访问。

2

内部类的目的是以可以从其他地方使用的方式“打包”操作的实现。当您将一段代码传递给一个可以将控制权交还给您的方法时,您可以实现回调的概念。

基类/接口用于为该段代码提供访问点。您和您调用的方法通过同意接口的内容(实际上是任何类)必须实现的目标方法才能够回拨您的回调方法的名称和签名达成一致。

更具体地说,为了让窗口回调窗口监听器,您必须同意windowClosing方法的名称和签名。你通过实现一个接口来做到这一点。

在极少数情况下,当目标方法由java.lang.Object(例如toString)执行时,您可以从顶级Object派生您的命名或匿名内部类。

3

每个类必须扩展一些超类。 只有例外是java.lang.Object,这是顶级的,因此不能有有超类。匿名内部类在这方面没有什么不同。

0

你是对你的说法,即类,通过它你让匿名内部类 继承该类自动在这种情况下,匿名类继承C类

class C 
{ 
void one() 
{ 
System.out.println("***************************\n********"); 

} 
} 
class three 
{ 
public static void main(String args[]) 

{ 
C obj=new C(){ 
      void one() 
      { 
      System.out.println("//////////////"); 
       } 
      }; 
obj.one(); 

} 

}