我正在学习java swing,并且遇到了匿名内部类的概念。在研究了一下这个link后,我觉得匿名内部类必须总是扩展一些其他的类,因为它作为参数传递的方法是预定义的。至多,如果一个方法接受Object实例作为参数,那么我们只能创建一个匿名的独立内部类。我只是寻求你的意见,我是否正确。如果你能提供一些例子,这将是有帮助的。 在此先感谢。匿名内部类必须扩展一些超类?
3
A
回答
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();
}
}
相关问题
- 1. 创建扩展其他类内部匿名类
- 2. 匿名内部类
- 3. 扩展内部类
- 4. 必须有Emacs扩展名?
- 5. Class org.springframework.web.jsf.el.SpringBeanFacesELResolver必须扩展javax.el.ELResolver类型
- 6. 超级VS这个当内部类扩展外部类
- 7. 从Java匿名内部类
- 8. 匿名内部类接口
- 9. 声明匿名内部类
- 10. java.lang.NoClassDefFoundError:在匿名内部类
- 11. 从内部匿名类
- 12. 获取匿名或内部类的超类
- 13. 在Java中,匿名类可以扩展另一个类吗?
- 14. 匿名类变成内部类
- 15. 关于匿名类vs匿名内部类的困惑
- 16. 由另一个内部类扩展的内部类
- 17. 匿名内部类(优于非匿名内部类)的优点是什么?
- 18. 阶:缺少参数类型扩展功能:参数类型的匿名函数必须充分了解
- 19. 成员变量必须扩展类A并实现一些接口
- 20. 必须C库有.lib扩展名
- 21. 为什么必须导入内部类?
- 22. 定义一个协议来实现类必须从一些超级类
- 23. PHP类扩展超过内存 - CodeIgniter
- 24. 命名几个扩展线程类的内部类?
- 25. 关键字用于外类从一个匿名内部类
- 26. Java:从匿名类获取超类
- 27. PHPUnit_Framework_Assert :: assertClassHasStaticAttribute()必须是类名
- 28. Python中的匿名内部类
- 29. Spring AOP的匿名内部类
- 30. 收集操作与匿名内部类
所以我得到的是匿名内部类只能是用于覆盖其超类的方法。 –