2010-08-17 142 views

回答

206

你是否在寻找:

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

感谢您的回答! – trusktr 2013-10-05 23:48:48

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 2010-08-17 16:50:54

+1

啊,是的,我会改变它的。通常的例子是相反的(B扩展A)。 – 2010-08-17 16:52:34

+0

欺骗了亚;-p非常感谢您的详细解答;尽管我接受了评价,但它是最清晰的国际海事组织。 – Armand 2010-08-18 09:12:23

34

你想知道,如果bis assignable froma

b.isAssignableFrom(a); 

此外,如果你想知道ab直接子类:

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

感谢您的回答,并感谢您从问题中使用'a'和'b' – Armand 2010-08-18 09:13:54

相关问题