天天看点

Java反射05-继承关系本文重点:代码演示:运行结果:

回顾: 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{

}
           

运行结果:

Java反射05-继承关系本文重点:代码演示:运行结果:

到此为止,java泛型的基础就完了,更多的应用在开发中再细说。有不足或者错误之处,欢迎指出。