黑马程序员技术交流社区
标题:
关于匿名内部类的提问
[打印本页]
作者:
曾振华
时间:
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