class App
{
public static void main(String args[])
{
(
new Inner()
{
void setName(String n)
{
name = n;
System.out.println("姓名:"+name);
}
}
).setName("张华");
}
static class Inner
{
String name;
}
}
这个程序是正确的。可我不明白,Inner已经是内部静态类了,可是为什么 new Inner()中又可以定义方法呢??

解决方案 »

  1.   

     new Inner()
                {
                    void setName(String n)
                    {
                        name = n;
                        System.out.println("姓名:"+name);
                    }
                }
            )
    这是匿名内部类的写法了,相当于重新定义了一个类(类里当然可以写方法了),跟静态类没什么关系的。相关知识可以参看内部类部分。
      

  2.   

    匿名内部类问题,把它改为内部类就很明白了。例如:public class APP {
    public static void main(String[] args) {
    class Inner1 extends Inner {
    public void setName(String n)
                {
                    name = n;
                    System.out.println("姓名:"+name);
                }
    }
    new Inner1().setName("张华");
    }
    static class Inner
        {
            String name;
        }
    }其实Inner1从Inner继承过来的,当然可以引用name变量,还可以定义自己的方法,比如setName().
      

  3.   

    3#'s reply is quite easy to understand...
      

  4.   

    实际上这里new的已经不是inner本身了,而是它的子类了,所以在子类中定义自己的方法很好理解!
    比如在这里:
    Thread  t = new Thread(new Runnable(){       
          public void run(){}
    });
    这里new Runnable,而Runnable是接口,那么实际上不是在new Runnable,而是new它的实现类,只不过这个实现类没有名字,即匿名类
      

  5.   

    LZ呀.只要你把匿名类这个词搞明白了.那一切问题就应该OK了...