zoukankan      html  css  js  c++  java
  • Java反射(5)获取继承关系

    目录:
    通过Class对象可以获取继承关系:

    • 1.Class getSuperclass():获取父类类型;(单继承)
    • 2.Class[] getInterfaces():获取当前类实现的所有接口;(多实现)
    • 3.通过Class对象的isAssignableFrom()方法,判断Class向上转型是否可以实现。

    1.获取父类类型

    public class Main {
        public static void main(String[] args) throws Exception {
            Class i = Integer.class;
            Class n = i.getSuperclass();
            System.out.println(n);
            Class o = n.getSuperclass();
            System.out.println(o);
            System.out.println(o.getSuperclass());
        }
    }
    

    输出:

    class java.lang.Number 
    class java.lang.Object 
    null 
    

    Integer的父类类型是Number,Number的父类是Object,Object的父类是null。除Object外,其他任何非interface的Class都必定存在一个父类类型。

    2.获取当前类实现的所有接口

    public class Main {
        public static void main(String[] args) throws Exception {
            Class s = Integer.class;
            Class[] is = s.getInterfaces();
            for (Class i : is) {
                System.out.println(i);
            }
        }
    }
    
    

    输出Integer实现的接口有:

    java.lang.Comparable
    java.lang.constant.Constable
    java.lang.constant.ConstantDesc
    

    3.判断Class向上转型

    在非反射调用中,当我们判断一个实例是否是某个类型时,正常情况下,使用instanceof操作符:

    Object n = Integer.valueOf(123);
    boolean isDouble = n instanceof Double; // false
    boolean isInteger = n instanceof Integer; // true
    boolean isNumber = n instanceof Number; // true
    boolean isSerializable = n instanceof java.io.Serializable; // true
    

    如果是两个Class实例,要判断一个向上转型是否成立,可以调用isAssignableFrom():

    // Integer i = ?
    Integer.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Integer
    // Number n = ?
    Number.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Number
    // Object o = ?
    Object.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Object
    // Integer i = ?
    Integer.class.isAssignableFrom(Number.class); // false,因为Number不能赋值给Integer
    

    博客来源:
    https://www.liaoxuefeng.com/wiki/1252599548343744/1264804244564000

  • 相关阅读:
    SDN第二次上机作业
    SDN第二次作业
    SDN第一次上机作业
    个人作业-软件产品案例分析
    pandas之Series
    pandas简答介绍
    python爬取英文名
    python爬取动态网页
    python画树
    Python存储数据的方式
  • 原文地址:https://www.cnblogs.com/JohnTeslaaa/p/12716964.html
Copyright © 2011-2022 走看看