我注意到:
class A {
ClassB b = new ClassB() { // anonymous class
/* some expression using this */
}
}
每当我this
在匿名类中使用关键字时,都this
指的是封闭的外部类/枚举,而不是匿名类。
这是否意味着this
永远不能代表匿名类?只是“正常”的类和枚举?
另外,可以this
或super
代表一个接口吗?
我注意到:
class A {
ClassB b = new ClassB() { // anonymous class
/* some expression using this */
}
}
每当我this
在匿名类中使用关键字时,都this
指的是封闭的外部类/枚举,而不是匿名类。
这是否意味着this
永远不能代表匿名类?只是“正常”的类和枚举?
另外,可以this
或super
代表一个接口吗?
您最初的假设是错误的 -this
始终代表当前实例,即当前类的实例,即使它是匿名的。
您关于使用的说法this
不正确。当你this
在匿名类内部使用时,它总是指匿名类。除非您使用OuterClassName.this
.
this
或者super
永远不能代表一个接口,因为一个接口不能有定义的方法。
A.this
从内部类使用。
它不能代表一个接口,因为你不能在接口中定义任何非静态类,因为永远不会有接口的实例。
编辑:通过添加评论中的信息来澄清。
在 Javathis
中,即使它是匿名类,它也始终是当前类。否,this
或super
不能代表接口。
您的匿名类总是扩展另一个类。即使你显式地实现了一个接口,你也在扩展java.lang.Object
,你只能调用java.lang.Object
viasuper
调用的方法。
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
}
};