A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tangxiaobo1991 中级黑马   /  2014-2-20 09:08  /  1089 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于内部匿名类,我发现一个很奇怪的现象,它不能直接放在成员位置上,必须放在方法内,否则编译会失败!!!内部匿名类不是相当于匿名子类对象吗,怎么不能放在成员位置上,例如下面的例子
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() ;
  }
  }

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
人工置顶


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

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

共勉 共勉啊!!哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马