3

我正在学习 java swing,遇到了匿名内部类的概念。在这个链接上研究了一下之后,我觉得匿名内部类必须始终扩展一些其他类,因为它作为参数传递的方法是预定义的。最多,如果一个方法接受 Object 实例作为参数,只有这样我们才能创建一个匿名的独立内部类。我只是征求你的意见,我是否正确。如果您能提供一些示例,将会很有帮助。提前致谢。

4

4 回答 4

4

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

于 2012-09-08T16:31:25.973 回答
2

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

基类/接口用于为那段代码提供访问点。您和您调用的方法就回调方法的名称和签名达成一致,方法是就您的内部类(实际上是任何类)必须实现的接口达成一致,目标方法才能回调您。

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

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

于 2012-09-08T16:24:45.533 回答
1

创建一个匿名内部类而不扩展任何东西基本上意味着你无法与之交谈。

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

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

与该对象的实例对话的唯一方法是通过已知的 ActionListener 方法(恰好是 addActionListener 需要的方法),您添加的任何其他方法只能在对象本身内部访问。如果您不必扩展/实现任何东西,那么根本就没有方法可以从外部访问。

于 2012-09-08T16:24:45.887 回答
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();

}

}
于 2012-09-08T16:31:45.027 回答