Java如何获得直接的超类和类的接口?

Java反射还处理继承概念。可以使用的方法getInterfaces()和getSuperclass()获取类的直接接口和直接超类java.lang.Class类对象。

  • getInterfaces()将返回一个Class对象数组,这些对象代表目标Class对象的直接超级接口。

  • getSuperclass()将返回Class表示目标Class对象的直接超类的对象,或者null如果目标表示Object类,接口,原始类型或void,则返回该对象。

package org.nhooo.example.lang.reflect;

import javax.swing.*;
import java.util.Date;

public class GetSuperClassDemo {
    public static void main(String[] args) {
        GetSuperClassDemo.get(String.class);
        GetSuperClassDemo.get(Date.class);
        GetSuperClassDemo.get(JButton.class);
        GetSuperClassDemo.get(Timer.class);
    }

    public static void get(Class clazz) {
        // 获取clazz对象的直接接口数组
        Class[] interfaces = clazz.getInterfaces();

        System.out.format("Direct Interfaces of %s:%n",
                clazz.getName());
        for (Class clz : interfaces) {
            System.out.println(clz.getName());
        }

        // 获取clazz对象的直接超类
        Class superclz = clazz.getSuperclass();
        System.out.format("Direct Superclass of %s: is %s %n",
                clazz.getName(), superclz.getName());
        System.out.println("====================================");
    }
}

这是代码段的结果:

Direct Interfaces of java.lang.String:
java.io.Serializable
java.lang.Comparable
java.lang.CharSequence
Direct Superclass of java.lang.String: is java.lang.Object 
====================================
Direct Interfaces of java.util.Date:
java.io.Serializable
java.lang.Cloneable
java.lang.Comparable
Direct Superclass of java.util.Date: is java.lang.Object 
====================================
Direct Interfaces of javax.swing.JButton:
javax.accessibility.Accessible
Direct Superclass of javax.swing.JButton: is javax.swing.AbstractButton 
====================================
Direct Interfaces of javax.swing.Timer:
java.io.Serializable
Direct Superclass of javax.swing.Timer: is java.lang.Object 
====================================