2010-08-17 26 views

Respuesta

206

¿Usted está buscando:

Super.class.isAssignableFrom(Sub.class) 
+0

Gracias por la respuesta! – trusktr

73

Si usted quiere saber si es o no un Class se extiende otra, utilizar Class#isAssignableFrom(Class). Por su ejemplo, sería:

if(B.class.isAssignableFrom(A.class)) { ... } 

Si usted está interesado en si es o no es una instancia de un tipo particular, utilizar instanceof:

A obj = new A(); 
if(obj instanceof B) { ... } 

en cuenta que estos volverán true si el class/instance es un miembro de la jerarquía de tipos y no es restrictivo para las relaciones directas de superclase/subclase. Por ejemplo:

// if A.class extends B.class, and B.class extends C.class 
C.class.isAssignableFrom(A.class); // evaluates to true 
// ...and... 
new A() instanceof C; // evaluates to true 

Si desea comprobar si hay relaciones directas superclase/subclase, Tim has provided an answer también.

+2

En realidad, B.class.isAssignableFrom (A.class), ya que él quiere saber si A es una subclase de B. – meriton

+1

Ah sí, voy a cambiar eso. Por lo general, los ejemplos son al revés (B que extiende A). –

+0

tricked ya ;-p Muchas gracias por la respuesta detallada; Aunque estoy aceptando el de Meriton, ya que es el OMI más claro. – Armand

34

¿Quiere saber si bis assignable froma:

b.isAssignableFrom(a); 

Además, si usted quiere saber que a es una subclase directa de b:

a.getSuperclass().equals(b); 
+0

gracias por la respuesta, y gracias por usar 'a' y' b' de la pregunta – Armand

Cuestiones relacionadas