在'新'语句之后,花括号会做什么?

时间:2015-04-03 19:56:21

标签: java

我正在查看this example并想知道第一行的作用:

private SiteStreamsListener listener = new SiteStreamsListener() {

看起来你可以用这种方式声明其他方法或覆盖方法。例如,我可以做以下事情吗?

ArrayList myList = new ArrayList() {
    @Override String toString()
    {
       <my code here>
    }

    <insert new methods here>
}

2 个答案:

答案 0 :(得分:5)

这些花括号定义anonymous inner class

这使您可以覆盖正在启动的类的publicprotected方法。您可以使用任何非final类执行此操作,但最适用于抽象类和接口,这只能以这种方式启动。

(为了限定最后一句,只有一个非default方法的接口可以使用Java 8中的lambda语句启动,绕过这种设计方法。)

答案 1 :(得分:0)

ArrayList myList = new ArrayList() {
 @Override 
 String toString()
 {
   <my code here>
 }

 <insert new methods here>

}

是的,你可以这样做。您可以挑战公共的受保护方法。虽然您可以添加新方法,但这些方法不能通过ArrayList类的myList实例访问。

有关详细信息,请参阅java文档。

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html#declaring-anonymous-classes