• Java反射机制demo(四)—获取一个类的父类和实现的接口


     https://www.cnblogs.com/AaronCui/p/4913642.html

     

    1,Java反射机制得到一个类的父类

    使用Class类中的getSuperClass()方法能够得到一个类的父类

    如果此 Class 表示 Object 类、一个接口、一个基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示该 Object 类的 Class 对象。

    测试代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package com.aaron.reflect;
     
    public class Demo4 {
        public static void main(String[] args) {
            Class<?> c = Integer.class;
            System.out.println("Integer的父类是:"+c.getSuperclass());
             
            c = Number.class;
            System.out.println("Number的父类是:"+c.getSuperclass());
             
            c = Object.class;
            System.out.println("Object的父类是:"+c.getSuperclass());
        }
    }

      运行结果:

    1
    2
    3
    Integer的父类是:class java.lang.Number
    Number的父类是:class java.lang.Object
    Object的父类是:null

      由于Java没有多继承,一个类最多只能有一个父类,因此返回类型并不是一个数组。

    2,Java反射机制返回一个类实现的接口

    当我们开发一个接口,并用一个类去实现它,我们看到某个类,就知道它实现了对应的什么接口,但是机器本身得到一个类时,并不知道它实现的接口是什么样子。通过反射机制,可以取到某个类实现的接口的Class对象,从而可以探查这个接口内部的结构。

    本文中给出了一个简单的Demo。

    首先,接口的定义如下;

    1
    2
    3
    4
    5
    6
    package com.aaron.reflect;
     
    public interface Animal {
        public static final String name = "animal";
        public String sayHello(String name);
    }

      然后,定义一个类去实现这个接口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package com.aaron.reflect;
     
    import java.util.jar.Attributes.Name;
     
    public class Dog implements Animal {
     
        public final static String name = "dog";
         
        @Override
        public String sayHello(String str) {
            return String.format("%s  says : %s"this.name, str);
        }
    }

      接口和实现类中都只有一个方法。

    测试类的代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package com.aaron.reflect;
     
    public class Demo3 {
        public static void main(String[] args) {
            Class<?> c = Dog.class;//得到Dog对应的Class对象
            Class<?> interfaces[] = c.getInterfaces();//获得Dog所实现的所有接口
            for (Class<?> inte : interfaces) {//打印
                System.out.println("Dog实现接口:"+inte);
            }
        }
    }

     运行结果:

    1
    Dog实现接口:interface com.aaron.reflect.Animal

      当然,Java没有多继承,但是可以实现多个接口,因此这里返回了一个数组。

    需要注意的是:

    Class<?>[] getInterfaces()得到的数组中,接口对象顺序和这个对象所表示的类中implements子句中接口名的顺序,是一致的。

     
  • 相关阅读:
    .net开源工作流ccflow从表数据数据源导入设置
    驰骋开源的asp.net工作流程引擎java工作流 2015 正文 驰骋工作流引擎ccflow6的功能列表
    app:clean classes Exception
    Android Couldn't load BaiduMapSDK
    android okvolley框架搭建
    compileDebugJavaWithJavac
    android重复的文件复制APK META-INF许可证错误记录
    android listview多视图嵌套多视图
    通讯录笔记
    面试总结
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/12010434.html
Copyright © 2020-2023  润新知