黑马程序员技术交流社区

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

作者: 曾振华    时间: 2013-10-9 22:36
标题: 关于匿名内部类的提问
本帖最后由 曾振华 于 2013-10-10 14:30 编辑

interface Inter
{
        void method();
}

class Test
{

                static Inter function()
                {
                        return new Inter()
                        {
                                public void method()
                                {
                                        System.out.println("method run");
                                }
                        };
                }
}


class  InnerTest
{
        public static void main(String[] args)
        {
                Test.function().method();
        }
}


Test调用一个静态函数function的对象的方法(method),中间的一段代码

                        return new Inter()
                        {
                                public void method()
                                {
                                        System.out.println("method run");
                                }
                        };

最后为什么要加个分号(;)?


如果代表是一个对象,一般都表示为 new Inter();       既然后面有接大括号,为什么还要加个  ;  ?
作者: 飘落    时间: 2013-10-9 22:57
本帖最后由 飘落 于 2013-10-9 23:00 编辑

分开看能更好的理解,Inter{//code}是一个匿名内部类,
而返回的是一个匿名对象,通常写成return new Abc();
这样把匿名内部类放到匿名对象中就变成了
return new Inter(){//code};
return 的后面实质上是一个匿名对象,
只不过里面的对象是匿名内部类实例化得到的。

作者: 横塘西岸    时间: 2013-10-9 23:04
return返回的是一个对象,一句话结束后面要加分号,new Inter()就是new一个Inter对象,但是它是一个接口,必须实现里面的方法,所以就看到大括号里面的内容了,其实是一个内部类
作者: 呆萌    时间: 2013-10-10 04:59
分号存在的原因:ruturn 匿名内部类实例化对象本身是一个语句,语句结束要用分号标识。
分号和ruturn没有在同一行是因为匿名内部类的格式写法和代码的易阅读性(阶梯层次)。
{:soso_e115:}这样理解没问题的!

作者: To    时间: 2013-10-10 10:51
楼主你好,如果问题已解决,请将帖子状态改为提问结束,如果没有解决请楼主继续提问,谢谢合作




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