在Java中,类对象与它们所代表的类具有相同的遗传关系吗?
答案 0 :(得分:8)
.class
属性始终返回Class
个对象。 Class
类(奇怪)有一个通用参数。泛型参数类型是子类。
Class<String> stringClass = String.class;
Class<Object> objectClass = Object.class;
因为使用泛型,Type<foo>
NOT 是Type<subtype_of_foo>
的超类型(请参阅the Java tutorials),这意味着答案是“否”。
答案 1 :(得分:4)
Class
对象都是相同的类。
你可以说,因为如果你看一下Javadoc就可以看到Class
class is final
.
答案 2 :(得分:1)
不,只有一个名为Class
的班级。 String.class是Class的实例,也是Object.class。
答案 3 :(得分:1)
试试这段代码:
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
答案 4 :(得分:0)
即使Y扩展X,Class也不扩展Class的原因是任何泛型类型G,G不扩展G
你可能想在常见问题解答中查一查。一袋苹果不是一袋水果,即使苹果是水果;因为你可以在后者中添加任何水果,但只向前者添加苹果。
答案 5 :(得分:0)
如果我理解你的问题,情况并非如此。表示java.lang.String
类以及任何其他类的对象始终属于类java.lang.Class
。
请记住java.lang.Class
被定义为 final ,因此您无法继承它。
答案 6 :(得分:0)
所有Class对象都是Class的实例。
如果你想知道一个类的层次结构,你可以调用getSuperClass()和getInterfaces()
注意:您可能需要递归调用这些来获取所有超类和接口。