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

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

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

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

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

测试代码:

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());
	}
}

  运行结果:

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

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

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

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

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

首先,接口的定义如下;

package com.aaron.reflect;

public interface Animal {
	public static final String name = "animal";
	public String sayHello(String name);
}

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

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);
	}
}

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

测试类的代码如下:

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);
		}
	}
}

 运行结果:

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

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

需要注意的是:

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

时间: 2024-10-12 10:24:36

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

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getNam

java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(1)

java学习一段时间之后,大家可能经常会听到反射这个词,那么说明java已经学习到一个高一点的层次了.接下来我会一步步和大家一起揭开java高级特性反射的神秘面纱. 首先介绍下类对象这个概念,可能会经常用到这个概念: 类对象:java中有句很经典的话"万事万物皆对象",相信大家都不陌生,这句话告诉了我们java的特征之一,那就是面向对象.java中类的概念我们都很熟悉,既然万事万物皆是对象,那么类是谁的对象呢?<对象的概念:一个类的实例>换句话说,类是谁的实例.如此就有了类

java 反射机制:运行时的类信息(为框架服务的Bug存在)

反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 换一种引出反射的说法是:当通过反射与一个未知的类型的对象打交道是,JVM只是简单地检查这个类,看它是属于哪个特定的类(就想RTTI那样).在用它做其他事情之前必须先加载那个类的Class对象.因此,那个类的.class文件对于JVM来说必须是可获取的:那么在本地机器上,要么通过网络获得

java 反射机制 Demo 练习

最近在研究java 反射机制,看网上视频,并抄了下来研究,用到Servlet 注解,绝不亚于SpringMVC 的注解使用,特此记录分享,Servlet 再也不用为传递参数而判断担忧了,专注业务! 1. 首先定义一个父类,所有的业务操作全部继承之. 1 package controller; 2 3 import java.io.IOException; 4 import java.lang.reflect.Method; 5 6 import javax.servlet.ServletExce

Java反射机制demo(五)—获得并调用一个类中的方法

这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和运行结果.获取所有的方法使用Class类中getMethos()方法. 待获取的类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package

java反射机制剖析(三)—类类型Class

为了区别于我们常用的Class,因此给了个中文名类类型.目的就是为了知道此Class非彼Class.上一篇博客已经介绍了Class Loader,它的作用是根据提供的信息来加载类到内存中.我之前有提过这个类信息的提供者就是本篇博客要介绍的Class.提醒:一个类的Class对象和它的Instance是不一样的,切记,不然你会混乱的.开始了! 概念 Class类是所有类(注意是对象)的共有信息的抽象,比如该类实现的接口.对应的加载器.类名等等.一句话,类类型保存了每个类所对应的类型信息.每一个类都

Java反射机制(四)—番外篇,实例化方法深入

反射机制这几篇博客写下来发现涉及到Java类的加载机制,这部分的内容也比较独立的一部分,因此单另一篇来写.在JAVA中任何的类都是需要加载到JVM中才能运行的.之前Class Loader介绍了类的加载机制,那么这里要说的是不同加载方式之间的对比,好能对JAVA类的实例化过程有更深刻的体会. new和Class.newInstance 我们说代码里出现new关键字意味着对于可能变动的代码,耦合过高了.遇到这种情况我们会用反射机制来去除new关键字,这在代理模式里我们见过了.实际上也就是用了Cla

java 反射机制与动态加载类学习要点

获取Class类的对象: 假设Foo是一个类,Foo foo = new Foo():则 第一种:Class c1 = Foo.class; 第二种:Class c2 = foo.getClass(); 第三种:Class c3 = Class.forName("com.nudt.reflection.Foo"); //会抛出异常 此时  c1 == c2 == c3 为true 也可以通过c1\c2\c3创建Foo的实例: Foo foo = (Foo)c1.newInstance(

C#控制台 getmethods获取一个类及父类中共有的方法名

1 code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Reflection; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace ConsoleApplication10 9 { 10 class Program 11 { 12 static void Main(string[]