🐻获取继承关系
2021-3-8
| 2023-8-3
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
获取到某个Class对象时,实际上就获取到了一个类的类型:
还可以用实例的getClass()方法获取:
最后一种获取Class的方法是通过Class.forName(""),传入Class的完整类名获取:
这三种方式获取的Class实例都是同一个实例,因为JVM对每个加载的Class只创建一个Class实例来表示它的类型。
 

获取父类的Class

有了Class实例,还可以获取它的父类的Class
Integer的父类类型是NumberNumber的父类是ObjectObject的父类是null。除Object外,其他任何非interfaceClass都必定存在一个父类类型。
 

获取interface

由于一个类可能实现一个或多个接口,通过Class可以查询到实现的接口类型。例如,查询Integer实现的接口:
运行上述代码可知,Integer实现的接口有:
  • java.lang.Comparable
  • java.lang.constant.Constable
  • java.lang.constant.ConstantDesc
要特别注意:getInterfaces()只返回当前类直接实现的接口类型,并不包括其父类实现的接口类型:
Integer的父类是NumberNumber实现的接口是java.io.Serializable
此外,对所有interfaceClass调用getSuperclass()返回的是null,获取接口的父接口要用getInterfaces()
如果一个类没有实现任何interface,那么getInterfaces()返回空数组。
 
 

继承关系

当判断一个实例是否是某个类型时,正常情况下,使用instanceof操作符:
如果是两个Class实例,要判断一个向上转型是否成立,可以调用isAssignableFrom()
  • Java
  • 调用构造方法动态代理
    目录