猿问

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

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


A Obj = new A() {

    @Override

    public String toString() {

        return "Hello!";

    }

}

在这种情况下,Obj 是一个匿名内部类的实例,其 toString 方法已被覆盖。既然是用类型A声明的,那么匿名类一定是A的子类。那么,为什么这个类不称为匿名子类而不是匿名内部类呢?“内在”从何而来?


潇湘沐
浏览 304回答 3
3回答

慕尼黑8549860

是的,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 的子类......),但它也是一个匿名类。
随时随地看视频慕课网APP

相关分类

Java
我要回答