假设 A 是一个自定义类,并考虑以下匿名内部类的声明:A Obj = new A() { @Override public String toString() { return "Hello!"; }}在这种情况下,Obj 是一个匿名内部类的实例,其 toString 方法已被覆盖。既然是用类型A声明的,那么匿名类一定是A的子类。那么,为什么这个类不称为匿名子类而不是匿名内部类呢?“内在”从何而来?
3 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
是的,obj是A. 您可以通过调用来验证超类obj.getClass().getSuperclass():
这会打印如下内容:
class stackoverflow.Test$1 //obj.getClass()
class stackoverflow.A //obj.getClass().getSuperclass()
那么,为什么这个类不称为匿名子类而不是匿名内部类呢?
这些只是语义。这是一个名字。然而,可能有很多原因,其中之一是匿名类可以直接实现接口:
Runnable r = new Runnable() {
public void run() {}
}
这不是任何东西的子类(而是 Object,但什么不是 Object 的子类......),但它也是一个匿名类。
添加回答
举报
0/150
提交
取消