Java反射机制demo(四)—获取⼀个类的⽗类和实现的接⼝
Java反射机制demo(四)—获取⼀个类的⽗类和实现的接⼝
java反射获取父类属性1,Java反射机制得到⼀个类的⽗类
使⽤Class类中的getSuperClass()⽅法能够得到⼀个类的⽗类
如果此Class表⽰Object类、⼀个接⼝、⼀个基本类型或 void,则返回 null。如果此对象表⽰⼀个数组类,则返回表⽰该Object类的Class对象。
测试代码:
package flect;
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 flect;
public interface Animal {
public static final String name = "animal";
public String sayHello(String name);
}
  然后,定义⼀个类去实现这个接⼝
package flect;
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 flect;
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 flect.Animal
  当然,Java没有多继承,但是可以实现多个接⼝,因此这⾥返回了⼀个数组。
需要注意的是:
Class<?>[] getInterfaces()得到的数组中,接⼝对象顺序和这个对象所表⽰的类中implements⼦句中接⼝名的顺序,是⼀致的。