我正在学习java swing并遇到了匿名内部类的概念。在研究了这个link之后,我觉得匿名内部类必须总是扩展其他类,因为它作为参数传递的方法是预定义的。最多,如果一个方法接受Object实例作为参数,那么我们才能创建一个匿名的独立内部类。我只是征求你的意见,我是否正确。如果您能提供一些示例,将会有所帮助。 提前致谢。
答案 0 :(得分:3)
每个类都必须扩展一些超类。 仅例外是java.lang.Object
,它是顶级类,因此不能拥有超类。匿名内部类在这方面没有什么不同。
答案 1 :(得分:2)
内部类的目的是以可以在其他地方使用的方式“打包”操作的实现。当您将一段代码传递给可以将控制权传递给您的方法时,这可以实现回调的概念。
基类/接口用于提供该段代码的访问点。您和您调用的方法就回调方法的名称和签名达成一致,方法是同意您的内部类(实际上,任何类)必须实现的接口,以便目标方法能够回调您。
更具体地说,为了让窗口回调你的窗口监听器,你必须同意windowClosing
方法的名称和签名。你可以通过实现一个接口来实现。
在极少数情况下,目标方法是java.lang.Object
实现的方法(例如toString
),您可以从顶级Object
派生您的命名或匿名内部类。
答案 2 :(得分:1)
创建一个匿名的内部类而不扩展任何东西基本上意味着你无法与之交谈。
您需要扩展一个类或实现一个接口,以便为您的对象提供与之通信的已知方法,例如;
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
// do something here.
}
});
与该对象的实例对话的唯一方法是通过已知的ActionListener方法(恰好是addActionListener所需的方法),您添加的任何其他方法只能在内部对象本身。如果您不必扩展/实现任何内容,则根本无法从外部访问任何方法。
答案 3 :(得分: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();
}
}