我正在查看this example并想知道第一行的作用:
private SiteStreamsListener listener = new SiteStreamsListener() {
看起来你可以用这种方式声明其他方法或覆盖方法。例如,我可以做以下事情吗?
ArrayList myList = new ArrayList() {
@Override String toString()
{
<my code here>
}
<insert new methods here>
}
答案 0 :(得分:5)
这些花括号定义anonymous inner class。
这使您可以覆盖正在启动的类的public
和protected
方法。您可以使用任何非final
类执行此操作,但最适用于抽象类和接口,这只能以这种方式启动。
(为了限定最后一句,只有一个非default
方法的接口可以使用Java 8中的lambda语句启动,绕过这种设计方法。)
答案 1 :(得分:0)
ArrayList myList = new ArrayList() {
@Override
String toString()
{
<my code here>
}
<insert new methods here>
}
是的,你可以这样做。您可以挑战公共的受保护方法。虽然您可以添加新方法,但这些方法不能通过ArrayList类的myList实例访问。
有关详细信息,请参阅java文档。