为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇湘沐 2021-07-26 13:08:16
假设 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 的子类......),但它也是一个匿名类。


查看完整回答
反对 回复 2021-07-29
  • 3 回答
  • 0 关注
  • 303 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信