1getSuperclass()
获取父类的Class:
- Class getSuperclass()
- Object的父类是null
- interface的父类是null
Class sup = Integer.class.getSuperclass();//Number.class
Object.class.getSuperClass();//null
Runnable.class.getSuperclass();//null
2getInterfaces()
获取当前类直接实现的interface:
- Class[] getInterfaces()
- 不包括间接实现的interface
- 没有interface的class返回空数组
- interface返回继承的interface
Class[] ifs = Integer.class.getInterfaces();//[Comparable.class]
Class[] ifs = java.util.ArrayList.class.getInterfaces();
//[List.class, RandomAccess.class, Cloneable.class, Serializable.class]
Class[] ifs = Math.class.getInterfaces();//[]
Class[] ifs = java.util.List.class.getInterfaces();//[Collection.class]
3isAssignableFrom()
判断一个向上转型是否成立:
- bool isAssignableFrom(Class)
//Integer i = ...
//Number x = i ?
Number.class.isAssignableFrom(Integer.class);//true
//Number n = ...
//Integer i = n ?
Integer.class.isAssignableFrom(Number.class);//false
4实例演示
public class Main { public static void main(String[] args) { Class cls =Student.class; printSuperClass(cls); printInterfaces(cls); printAllInterfaces(cls); System.out.println(); //Person p = new Student()?判断一个Student实例能否赋值给Person实例 System.out.println(Person.class.isAssignableFrom(Student.class));//true //Student s = new Person()?判断一个Person实例能否赋值给Student实例 System.out.println(Student.class.isAssignableFrom(Person.class));//false } static void printInterfaces(Class cls) { Class[] ifs = cls.getInterfaces(); System.out.println(cls.getSimpleName()+" implements " + Arrays.toString(cls.getInterfaces())); } static void printAllInterfaces(Class cls) { Class[] ifs = cls.getInterfaces(); for (Class i : ifs) { System.out.print(i.getSimpleName()); System.out.print(", "); printAllInterfaces(i); } Class sup = cls.getSuperclass(); if (sup != null) { printAllInterfaces(sup); } } static void printSuperClass(Class c) { System.out.print(c.getSimpleName()); Class s = c.getSuperclass(); if (s == null) { System.out.println(); }else { System.out.print(" : "); printSuperClass(s); } } }
public class Person implements Cloneable{ public int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
public class Student extends Person implements Hello,Serializable{ public static int number = 0; public String name; private String address = "beijing"; public Student() { this("unnamed"); } public Student(String name) { this(name,20); } private Student(String name,int age){ this.name = name; this.age = age; number++; } public void hello() { System.out.println("Hi, "+name+" from " +address +"!"); } }
public interface Hello { public void hello(); }
5总结
- 通过Class对象可以获取继承关系
- getSuperclass()
- getInterfaces()
- 通过Class对象的isAssignableFrom()方法可以判断一个向上转型是否正确