首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java接口问题

java接口问题
EN

Stack Overflow用户
提问于 2011-05-06 12:31:20
回答 3查看 1K关注 0票数 3

代码:-

代码语言:javascript
复制
10. interface Foo { int bar(); }
11. public class Sprite {
12.     public int fubar( Foo foo) { return foo.bar(); }
13.     public void testFoo() {
14.         fubar(
15.             new Foo() { public int bar(){ return 1; } }
16.         );
17.     }
18. }

-Am不能理解从第14行到第16行,因为我从来没有见过这样的东西fubar在一个method.Will任何机构,请解释14-16没有行?

EN

回答 3

Stack Overflow用户

发布于 2011-05-06 12:35:29

线路是错的。它应该在"new“和”Foo“之间有一个空格:

代码语言:javascript
复制
new Foo() { public int bar(){ return 1; } }

这将创建一个实现Foo的匿名类型的实例。参见Java in a Nutshell: Anonymous Classes ( 3.12.3小节介绍了语法)。

匿名类通常与事件侦听器一起广泛使用。参见Swing Trail: Inner Classes and Anonymous Inner Classes (但忽略该部分顶部讨论的内部类;-)

祝你编码愉快。

评论:

第14行是对fubar (上面定义为public int fubar(Foo foo))的方法调用的开始。请注意,new ...是一个表达式(匿名类型或非匿名类型),表达式(新对象)的结果作为参数传递给fubar。格式很大程度上是任意的--它可以在一行中完成。考虑下面的代码:

代码语言:javascript
复制
Foo aNewFoo = new Foo() { ... };
fuubar(aNewFoo);

希望这能把事情说清楚。

票数 3
EN

Stack Overflow用户

发布于 2011-05-06 12:36:27

这称为anonymous inner class。在执行new Foo() { ... }时,将创建一个具有编译器生成的名称的新类。这个新类实现了Foo接口。大致相当于:

代码语言:javascript
复制
interface Foo { int bar(); }
public class Sprite {
    public int fubar( Foo foo) { return foo.bar(); }
    public class MyFoo implements Foo {
        public int bar() { return 1; }
    }
    public void testFoo() {
        fubar(
            new MyFoo()
        );
    }
}

(我假设您的示例中newFoo之间缺少的空格是错误的。)

票数 3
EN

Stack Overflow用户

发布于 2011-05-06 12:34:07

它被称为匿名内部类。您正在动态创建Foo的实现,而不必编写命名类。

Here is a potentially useful SO question关于它们是什么,以及你什么时候可能想要使用它们。

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

https://stackoverflow.com/questions/5906814

复制
相关文章

相似问题

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