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

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

测试类的代码如下:

扫描二维码关注公众号,回复: 8124665 查看本文章
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子句中接口名的顺序,是一致的。

 
分类:  Java反射机制
 
 
 
« 上一篇:  Java反射机制demo(三)—获取类中的构造函数
» 下一篇:  Java反射机制demo(五)—获得并调用一个类中的方法

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子句中接口名的顺序,是一致的。

猜你喜欢

转载自www.cnblogs.com/kelelipeng/p/12010434.html