求助:什么情况下使用匿名内部类? 求助:什么情况下使用匿名内部类?匿名内部类有什么好处? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 个人理解是:图方便的时候。好处就是省事,你不用去完整定义一个类或者内部类。很多东西都是为了方便你使用,而并非说绝对要这么用。比如:while、do while、for,foreach 都是循环,只是某些场合用某种更方便。 1、内部类的第一个好处,隐藏你不想让别人知道的操作,也即封装性。2、非静态内部类对象有着指向其外部类对象的引用等等。给你一个例子,看起来会非常直观。http://www.examw.com/biancheng/java/157670/ 没看懂就是不单独写类定义,而是直接在构造对象时同步完成类定义,简单举例:Thread t = new Thread(new Runnable() { public void run() { ... }});t.start();这里面 new Runnable() { 这段代码,就是匿名类。 swing,awt事件中用的比较多,以及spring框架中。灵活性比较大。省去建立一个新类。一般都是接口,而且这样的接口方法的个数都比较少。 受Core Java作者Cay Hortsmann影响,我基本在设置动作监听时都是用匿名内部类! 1:匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句, ( new <类或接口> <类的主体> ) 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。2.匿名内部类的注意事项·匿名内部类不能有构造方法。 ·匿名内部类不能定义任何静态成员、方法和类。 ·匿名内部类不能是public,protected,private,static。 ·只能创建匿名内部类的一个实例。·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。·内部类只能访问外部类的静态变量或静态方法。3.匿名内部类的作用Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。仅仅表达一个封装的概念;但是Java的内部类不同,它可以访问包装类的成员(这表示它拥有指向包装类的句柄)。 NullPointerException还有Linkedlist sort的问题 【新手求解!】如何用面向对象的思想写程序? 问一个关于编码的问题. 我是新手,我已经安装了jdk6,我要用它制作网页,请问还要准备什么? rss与jsp如何结合在一起 一个getContentPane()的问题 这样为什么数据库查询结果的显示不成功 请教:关于中文字符串的长度? telnet 交互,返回的是上一次指令结果【急,请高手赐教】 !!!版主快来管管吧《JAVA初学者必读-经验总结》有大问题 求前辈给我看看为什么的我查询出了点问题 处理null有什么好方法?
比如:while、do while、for,foreach 都是循环,只是某些场合用某种更方便。
1、内部类的第一个好处,隐藏你不想让别人知道的操作,也即封装性。
2、非静态内部类对象有着指向其外部类对象的引用
等等。
给你一个例子,看起来会非常直观。http://www.examw.com/biancheng/java/157670/
没看懂就是不单独写类定义,而是直接在构造对象时同步完成类定义,简单举例:
Thread t = new Thread(new Runnable() {
public void run() {
...
}
});
t.start();这里面 new Runnable() { 这段代码,就是匿名类。
一般都是接口,而且这样的接口方法的个数都比较少。
动作监听时都是用匿名内部类!
2.匿名内部类的注意事项
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、方法和类。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
·内部类只能访问外部类的静态变量或静态方法。
3.匿名内部类的作用
Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。仅仅表达一个封装的概念;但是Java的内部类不同,它可以访问包装类的成员(这表示它拥有指向包装类的句柄)。