Directorio: la
relación de herencia se puede obtener a través del objeto Class:
- 1.Class getSuperclass (): obtiene el tipo de clase padre; (herencia única)
- 2.Class [] getInterfaces (): obtiene todas las interfaces implementadas por la clase actual; (implementaciones múltiples)
- 3. Mediante el método isAssignableFrom () del objeto Class, determine si se puede lograr la transformación ascendente de Class.
1. Obtenga el tipo de clase padre
public class Main {
public static void main(String[] args) throws Exception {
Class i = Integer.class;
Class n = i.getSuperclass();
System.out.println(n);
Class o = n.getSuperclass();
System.out.println(o);
System.out.println(o.getSuperclass());
}
}
Salida:
class java.lang.Number
class java.lang.Object
null
La clase padre de Integer es Number, la clase padre de Number es Object y la clase padre de Object es nula. Excepto Object, cualquier clase que no sea de interfaz debe tener un tipo padre.
2. Obtenga todas las interfaces implementadas por la clase actual
public class Main {
public static void main(String[] args) throws Exception {
Class s = Integer.class;
Class[] is = s.getInterfaces();
for (Class i : is) {
System.out.println(i);
}
}
}
Las interfaces implementadas por la salida Integer son:
java.lang.Comparable
java.lang.constant.Constable
java.lang.constant.ConstantDesc
3. Juzgar la transformación ascendente de la clase
En llamadas no reflexivas, cuando determinamos si una instancia es de cierto tipo, en circunstancias normales, usemos el operador instanceof:
Object n = Integer.valueOf(123);
boolean isDouble = n instanceof Double; // false
boolean isInteger = n instanceof Integer; // true
boolean isNumber = n instanceof Number; // true
boolean isSerializable = n instanceof java.io.Serializable; // true
Si se trata de dos instancias de clase, para determinar si una transformación ascendente es verdadera, puede llamar a isAssignableFrom ():
// Integer i = ?
Integer.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Integer
// Number n = ?
Number.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Number
// Object o = ?
Object.class.isAssignableFrom(Integer.class); // true,因为Integer可以赋值给Object
// Integer i = ?
Integer.class.isAssignableFrom(Number.class); // false,因为Number不能赋值给Integer
Fuente del blog:
https://www.liaoxuefeng.com/wiki/1252599548343744/1264804244564000