2010-08-17 1 views

ответ

206

Вы ищете:

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

Спасибо за ответ! – trusktr

73

Если вы хотите узнать, распространяется ли или нет Class другой, используйте Class#isAssignableFrom(Class). Для примера, это будет:

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

Если вы заинтересованы в том или не экземпляр определенного типа, используйте instanceof:

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

Заметьте, что они будут возвращаться true, если class/instance является членом иерархии типов и не ограничивает прямые отношения суперкласса/подкласса. Например:

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

Если вы хотите, чтобы проверить наличие прямых связей суперкласс/подкласс, Tim has provided an answer, а также.

+2

Собственно, это B.class.isAssignableFrom (A.class), так как он хочет знать, является ли A подклассом B. – meriton

+1

А, да, я это изменю. Обычно примеры - это наоборот (B-расширение A). –

+0

tricked ya ;-p Большое спасибо за подробный ответ; Я принимаю Meriton, хотя, поскольку это самая ясная IMO. – Armand

34

Вы хотите знать, если bis assignable froma:

b.isAssignableFrom(a); 

Кроме того, если вы хотите знать, что a является прямым подклассом b:

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

спасибо за ответ и спасибо за использование 'a' и' b' из вопроса – Armand

 Смежные вопросы

  • Нет связанных вопросов^_^