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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾振华 中级黑马   /  2013-10-9 22:36  /  1494 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曾振华 于 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();       既然后面有接大括号,为什么还要加个  ;  ?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 飘落 于 2013-10-9 23:00 编辑

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

点评

这个分析很给力!  发表于 2013-10-9 23:02

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
return返回的是一个对象,一句话结束后面要加分号,new Inter()就是new一个Inter对象,但是它是一个接口,必须实现里面的方法,所以就看到大括号里面的内容了,其实是一个内部类

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
分号存在的原因:ruturn 匿名内部类实例化对象本身是一个语句,语句结束要用分号标识。
分号和ruturn没有在同一行是因为匿名内部类的格式写法和代码的易阅读性(阶梯层次)。
{:soso_e115:}这样理解没问题的!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-10 10:51:05
报纸
楼主你好,如果问题已解决,请将帖子状态改为提问结束,如果没有解决请楼主继续提问,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马