首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这种写作方式?

这种写作方式?
EN

Stack Overflow用户
提问于 2011-03-31 21:54:56
回答 6查看 96关注 0票数 0

虽然我经常遇到,但我不理解这种编写代码的方式:

代码语言:javascript
运行
复制
Runnable r=new Runnable() {//<----- (braces start here?)
  public void run() {
    System.out.println("Hello");
  }
};  // ?

这是什么?请解释清楚。

EN

回答 6

Stack Overflow用户

发布于 2011-03-31 21:57:34

这是一个匿名内部类。它正在使用大括号中的代码创建Runnable接口的实现。除了实现接口之外,您还可以扩展其他类。好的方面是,您可以在不显式创建单独的类的情况下做到这一点,并且还可以在匿名内部类的主体中引用final局部变量(包括参数)。

有关更多详细信息,请参阅Java tutorial,或者只需搜索“匿名内部类”即可获得大量相关页面。

票数 9
EN

Stack Overflow用户

发布于 2011-03-31 22:01:38

正如其他人所提到的,这里创建的是一个匿名内部类。具体地说,编写代码的人说:

运行而不是Runnable类的实例,我想创建一个覆盖“

()”方法的子类,并创建它的一个实例。不值得我花时间去创建一个命名的子类,因为我只打算创建这个实例。相反,只需覆盖该方法并返回我需要的子类实例。

票数 1
EN

Stack Overflow用户

发布于 2011-03-31 22:02:01

这是一个anonymous class声明--基本上就是一个实现Runnable接口的类,作为一个匿名嵌套类进行声明和实例化。

注意,你也可以用同样的方式声明匿名子类:

代码语言:javascript
运行
复制
Object o = new Object(){
    public String toString(){ return "boo!" };
}

还要注意,您可以在匿名类代码中使用封闭方法的变量,但前提是变量为final (因为匿名类实际上获得了变量的副本)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5500998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档