2010-08-17 110 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

相關問題