求助:什么情况下使用匿名内部类?匿名内部类有什么好处?

解决方案 »

  1.   

    个人理解是:图方便的时候。好处就是省事,你不用去完整定义一个类或者内部类。很多东西都是为了方便你使用,而并非说绝对要这么用。
    比如:while、do while、for,foreach 都是循环,只是某些场合用某种更方便。
      

  2.   


    1、内部类的第一个好处,隐藏你不想让别人知道的操作,也即封装性。
    2、非静态内部类对象有着指向其外部类对象的引用
    等等。
    给你一个例子,看起来会非常直观。http://www.examw.com/biancheng/java/157670/
      

  3.   


    没看懂就是不单独写类定义,而是直接在构造对象时同步完成类定义,简单举例:
    Thread t = new Thread(new Runnable() {
      public void run() {
      ...
      }
    });
    t.start();这里面 new Runnable() { 这段代码,就是匿名类。
      

  4.   

    swing,awt事件中用的比较多,以及spring框架中。灵活性比较大。省去建立一个新类。
    一般都是接口,而且这样的接口方法的个数都比较少。
      

  5.   

    受Core Java作者Cay Hortsmann影响,我基本在设置
    动作监听时都是用匿名内部类!
      

  6.   

    1:匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,    (     new <类或接口> <类的主体>    )   这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
    2.匿名内部类的注意事项
    ·匿名内部类不能有构造方法。  
    ·匿名内部类不能定义任何静态成员、方法和类。  
    ·匿名内部类不能是public,protected,private,static。  
    ·只能创建匿名内部类的一个实例。
    ·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。  
    ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
    ·内部类只能访问外部类的静态变量或静态方法。
    3.匿名内部类的作用
    Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。仅仅表达一个封装的概念;但是Java的内部类不同,它可以访问包装类的成员(这表示它拥有指向包装类的句柄)。