Wie testet man, ob eine Java-class zur Laufzeit eine andere erweitert?

Wie kann ich testen, ob a eine Unterklasse von b ?

 Class a = A.class; Class b = B.class; 

Suchen Sie:

 Super.class.isAssignableFrom(Sub.class) 

Wenn Sie wissen möchten, ob eine Class andere Erweiterung enthält , verwenden Sie die class # isAssignableFrom (Class) . Für Ihr Beispiel wäre es:

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

Wenn Sie daran interessiert sind, ob eine Instanz von einem bestimmten Typ ist oder nicht, verwenden Sie instanceof :

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

Beachten Sie, dass diese den Wert true wenn die class / Instanz ein Mitglied der Typhierarchie ist und nicht auf direkte Oberklassen- / Unterklassenbeziehungen beschränkt ist. Beispielsweise:

 // 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 

Wenn Sie nach direkten Superklassen- / Unterklassenbeziehungen suchen möchten, hat Tim auch eine Antwort geliefert .

Sie möchten wissen, ob b zuweisbar ist von :

 b.isAssignableFrom(a); 

Wenn Sie wissen möchten, dass a eine direkte Unterklasse von b :

 a.getSuperclass().equals(b);