黑马程序员技术交流社区

标题: 关于匿名内部类的疑问 [打印本页]

作者: tangxiaobo1991    时间: 2014-2-20 09:08
标题: 关于匿名内部类的疑问
关于内部匿名类,我发现一个很奇怪的现象,它不能直接放在成员位置上,必须放在方法内,否则编译会失败!!!内部匿名类不是相当于匿名子类对象吗,怎么不能放在成员位置上,例如下面的例子
abstract class Person
  {
    abstract void show();
  }
  class out
  {
    int x=4;
    void function()
    {
      System.out.println("x="+x);
    }  
  new Person()
    {
     void show()
     {
      System.out.println("我是匿名子类对象");
     }
     void back()
     {
     
     }
    }.show();

    }

  class Demo
  {
    public static void main(String[] args)
    {
      out o=new out();
      o.function();   
  }
  }

红色部分是匿名内部类,为什么编译通不过?而把它放在放在方法内时就会编译通过啊??例如下面的例子:
abstract class Person
  {
    abstract void show();
  }
  class out
  {
    int x=4;
    void function()
    {
      System.out.println("x="+x);
    }  
public void function1()
{
  new Person()
    {
     void show()
     {
      System.out.println("我是匿名子类对象");
     }
     void back()
     {
     
     }
    }.show();

    }
}

  class Demo
  {
    public static void main(String[] args)
    {
      out o=new out();
      o.function();  
      o.function1() ;
  }
  }


作者: tangxiaobo1991    时间: 2014-2-20 09:12
人工置顶



作者: 疲劳的小马    时间: 2014-2-20 12:33
楼上解释的对的,这个平常还真没怎么注意,谢谢楼主分享,学习了。类中成员目前为止接触的,就好像只能有成员变量 方法 内部类,没见过直接把运行语句放类外面的,这个内部类调用方法就是一条语句,和输出语句是一样的。有谁知道的更多的可以教我更详细点的。。。
作者: tangxiaobo1991    时间: 2014-2-20 14:16
zengming13 发表于 2014-2-20 09:18
new Person()
    {
     void show()

哦,原来如此啊。。多谢猴王指点!!哈哈
作者: tangxiaobo1991    时间: 2014-2-20 14:34
疲劳的小马 发表于 2014-2-20 12:33
楼上解释的对的,这个平常还真没怎么注意,谢谢楼主分享,学习了。类中成员目前为止接触的,就好像只能有成 ...

共勉 共勉啊!!哈哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2