目录
通过反射获取继承关系
当我们得到一个实例的时候可以获取父类的Class
- Class.getSuperclass()返回父类的对象
- Object的父类是null,因为Object是所有类的根类
- interface的父类是null,因为interface没有superclass
Class sup = Integer.class.getSuperclass(); // Number.class(Integer的父类是Number)
Object.class.getSuperclass(); //null
Runnable.class.getSuperclass(); //null (因为Runnable是接口)
获取当前类直接实现的Interface:
- Class[ ] getInterfaces() : 返回一个class数组,数组只包含当前类直接实现的Interface,间接实现的Interface不包括
- 没有Interface的class返回空数组
- Interface返回继承的Interface
Class [ ] ifs = Integer.class.getInterfaces();//[Comparable.class]
Class [ ] ifs = java.util.ArrayList.class.getInterfaces();
//[List.class, RandomAccess.class, Cloneable.class, Serializable.class]
Class [ ] ifs = Math.class.getInterfaces(); // [ ]
Class [ ] ifs = java.util.List.class.getInterfaces(); //[Collection.class]
判断一个calss向上转型是否成立: bool isAssignableFrom(Class)
// Integer i = ...
//Number x = i?
Number.class.isAssignableFrom(Integer.class);//true
//上面代码相当于判断一个Integer实例能否赋值给一个Number类型的变量
//下面是跟上面相反的操作,即判断一个Number类型的实例能否赋值给一个Integer类型的变量
//Number n = ...
//Integer i = n?
Integer.class.isAssignableFrom(Number.class);//false