3

我注意到:

class A {
    ClassB b = new ClassB() { // anonymous class
        /* some expression using this */
    }
}

每当我this在匿名类中使用关键字时,都this指的是封闭的外部类/枚举,而不是匿名类。

这是否意味着this永远不能代表匿名类?只是“正常”的类和枚举?

另外,可以thissuper代表一个接口吗?

4

5 回答 5

6

您最初的假设是错误的 -this始终代表当前实例,即当前类的实例,即使它是匿名的。

于 2011-01-21T19:43:12.627 回答
5

您关于使用的说法this不正确。当你this在匿名类内部使用时,它总是指匿名类。除非您使用OuterClassName.this.

this或者super永远不能代表一个接口,因为一个接口不能有定义的方法。

于 2011-01-21T19:44:49.773 回答
0

A.this从内部类使用。

它不能代表一个接口,因为你不能在接口中定义任何非静态类,因为永远不会有接口的实例。

编辑:通过添加评论中的信息来澄清。

于 2011-01-21T19:42:01.333 回答
0

在 Javathis中,即使它是匿名类,它也始终是当前类。否,thissuper不能代表接口。

于 2011-01-21T19:58:10.350 回答
0

您的匿名类总是扩展另一个类。即使你显式地实现了一个接口,你也在扩展java.lang.Object,你只能调用java.lang.Objectviasuper调用的方法。

Runnable r = new Runnable() {
    public void run() {
        super.run(); // Error: run() is not a method of java.lang.Object
        super.toString(); // OK: toString() is inherited from java.lang.Object
    }
};
于 2011-01-21T22:31:15.213 回答