假设 A 是一个自定义类,并考虑以下匿名内部类的声明:
A Obj = new A() {
@Override
public String toString() {
return "Hello!";
}
}
在此场景中,Obj 是一个匿名内部类的实例,其 toString 方法已被重写。既然是用类型A声明的,那么匿名类一定是A的子类。那么,为什么这个类不叫匿名子类,而叫匿名内部类呢? “内在”从何而来?
最佳答案
是的,obj
是A
子类的实例。您可以通过调用 obj.getClass().getSuperclass() 来验证父类(super class):
打印出类似这样的内容:
class stackoverflow.Test$1 //obj.getClass()
class stackoverflow.A //obj.getClass().getSuperclass()
So then, why isn't this class called an Anonymous Subclass instead of an anonymous inner class?
这些只是语义。这是一个名字。然而,可能有很多原因,其中之一是匿名类可以直接实现接口(interface):
Runnable r = new Runnable() {
public void run() {}
}
这不是任何东西的子类(除了 Object,但不是 Object 的子类......),但它也是一个匿名类。
关于java - 匿名内部类实际上不是子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51903919/