簡體   English   中英

(類型)String.class是(類型)Object.class的子類型嗎?

[英]Is (the type of) String.class a subtype of (the type of) Object.class?

在Java中,類對象與它們所代表的類具有相同的遺傳關系嗎?

.class屬性始終返回Class對象。 Class類(怪異)有一個泛型參數。 泛型參數類型是子類。

Class<String> stringClass = String.class;
Class<Object> objectClass = Object.class;

並且因為使用泛型, Type<foo> 不是 Type<subtype_of_foo>的超Type<subtype_of_foo> (參見Java教程 ),這意味着答案是“否”。

Java中的Class對象都是相同的類。

你可以告訴,因為如果你看看Javadoc,你可以看到Class類是final

不,只有一個名為Class String.class是Class的實例,也是Object.class。

試試這段代碼:

boolean answer = Object.class.isAssignableFrom(String.class);
System.out.println(answer); // true!

然而:

Class<Object> string = String.class; <-- compile-time error
Class<? extends Object> string = String.class; <-- it's ok 

即使Y擴展X,Class也不擴展Class的原因是對於任何泛型類型G,G不擴展G

你可能想在常見問題解答中查一查。一袋蘋果不是一袋水果,即使蘋果是水果; 因為你可以添加任何水果到后者,但只有蘋果到前者。

如果我正確理解你的問題,情況並非如此。 表示java.lang.String類的對象以及任何其他類始終是java.lang.Class類。

請記住, java.lang.Class被定義為final ,因此您不能將其子類化

所有Class對象都是Class的實例。

如果你想知道一個類的層次結構,你可以調用getSuperClass()和getInterfaces()

注意:您可能需要遞歸調用這些以獲取所有超類和接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM