java - 匿名内部类实际上不是子类吗?

标签 java anonymous-inner-class

假设 A 是一个自定义类,并考虑以下匿名内部类的声明:

A Obj = new A() {
    @Override
    public String toString() {
        return "Hello!";
    }
}

在此场景中,Obj 是一个匿名内部类的实例,其 toString 方法已被重写。既然是用类型A声明的,那么匿名类一定是A的子类。那么,为什么这个类不叫匿名子类,而叫匿名内部类呢? “内在”从何而来?

最佳答案

是的,objA子类的实例。您可以通过调用 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/

相关文章:

Java 文本抗锯齿 : how to debug when not working?

java - 应该使用什么地址来连接 RestService?

java - 如何在 Netbeans IDE 6.5 的 JSP 页面中集成 JFrame(Swing 控件)?

Java Action 监听器

java - 访问匿名内部类中的非最终值

java - 构建一个匿名内部类并调用它的方法

java - 将 JasperReport jrxml 加载到 JFrame

java - Java 中是否有相当于 HTML 标题属性的方法?

java - Lambda 的行为与匿名内部类不同

java - 匿名内部类中的接口(interface)是如何工作的?