(类型)String.class是(类型)Object.class的子类型吗?

时间:2009-05-22 11:00:58

标签: java inheritance

在Java中,类对象与它们所代表的类具有相同的遗传关系吗?

7 个答案:

答案 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)

Java中的

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()

注意:您可能需要递归调用这些来获取所有超类和接口。