回顾: Class 对象:在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。通过Class实例得到类的信息的手段成为反射
Class对象获取的三种法法:
//方法一:Class class对象名 = 类名.class
Class cls1 = String.class;
//方法二:Class class对象名 = 对象.getClass()
String s = "chengyuan";
Class cls2 = s.getClass();
//方法三:Class class对象名 = Class.forName("类名");
Class cls3 = Class.forName("java.lang.String");
本文重点:
1、获取父类的Class实例
public Class<? super T> getSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。如果此 Class 表示 Object 类、一个接口、一个基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示该 Object 类的 Class 对象。
注意:Object是祖宗类,它的父类是null
Interface是没有父类的 所以也是null
2、获取当前类的直接实现interface : 接口继承关系
public Class<?>[] getInterfaces() 确定此对象所表示的类或接口实现的接口。 如果此对象表示一个类,则返回值是一个数组,
它包含了表示该类所实现的所有接口的对象。数组中接口对象顺序与此对象所表示的类的声明的 implements 子句中接口名顺序一致。
3、判断一个向上转型是否成立
public boolean isAssignableFrom(Class<?> cls) 判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。
代码演示:
public class ReflectionExtend {
public static void main(String[] args) {
Class clsFu = Fu.class;
Class clsZi = Zi.class;
Class clsSuper = clsZi.getSuperclass();
System.out.println(clsSuper.getName());
//测试Object的父类,和接口的父类
System.out.println(Object.class.getSuperclass());
System.out.println(Runnable.class.getSuperclass());
System.out.println("接口的继承关系=====================");
Class[] ifs = Integer.class.getInterfaces();
Class[] ArrIfs = java.util.ArrayList.class.getInterfaces();
for(Class aIfs :ArrIfs){
System.out.println(aIfs);
}
System.out.println("判断一个向上转型是否成立=====================");
System.out.println(Fu.class.isAssignableFrom(Zi.class));
}
}
class Fu {
}
class Zi extends Fu{
}