java.lang.Class和java.lang.Object
好的,这里有概念上的困难-从一本书中阅读和学习Java 它提到以下内容(在解释几个不同主题的过程中)——java.lang.Class和java.lang.Object,java,multiple-inheritance,Java,Multiple Inheritance,好的,这里有概念上的困难-从一本书中阅读和学习Java 它提到以下内容(在解释几个不同主题的过程中)—— Java不支持类层次结构中的多重继承。因此,如果类C是类a的子类,那么它不可能也是类B的子类(我知道接口在这里提供了一个解决方案) java.lang.Object是所有类(系统和用户)“扩展”的原始类。因此,每个类都是类java.lang.Object Java中的类不仅是编译器人工制品,而且在运行时由类Java.lang.class #3是否意味着语言中定义的类本身属于java.lang
java.lang.Object
是所有类(系统和用户)“扩展”的原始类。因此,每个类都是类java.lang.Object
Java.lang.class
java.lang.Class
——而#2是否意味着它们也属于java.lang.Object
——与#1相矛盾?比如java类的子类是哪个类
如果#1仍然成立,我猜这意味着#3只是说类的“运行时表示”是类java.lang.class
的实例,它是java.lang.Object
的子类,但类本身是java.lang.Object
的子类
感谢您的指导!!提前谢谢
#3不意味着语言本身定义的类属于java.lang.Class
否。(Class)testclass
是语法错误-没有类是java.lang.Class
的子类-它是final
类
扩展了对象
并表示一个类
假设我有TestClass
,它默认扩展了Object
,现在TestClass.class
或(TestClass).getClass()存在-它们返回class
,它扩展了Object
,是类的一个实例
3) Java中的类不仅是编译器工件,而且在运行时,由类Java.lang.class的实例表示
这是不对的。Java对象是对象。它们还有一个表示类类型的属性
public class Test {
public static final void main(String[] ignored) {
String s = "x";
Class cls = s.getClass();
System.out.println("s=" + s.toString());
System.out.println("cls=" + cls.toString());
}
}
输出:
s=x
cls=class java.lang.String
我们说“Java对象是类”是令人困惑的。这在一般意义上是正确的,但是在这个特定的技术细节中,它是不准确的
不严格地说,Java对象存储在*.class
文件中,这是另一个使这种区别混淆的地方
3) Java中的类不仅是编译器工件,而且在运行时,由类Java.lang.class的实例表示
这是正确的
#3不意味着语言本身定义的类属于java.lang.Class类型吗
这是正确的
而#2表示它们也是java.lang.Object类型
这是正确的
。。。矛盾的#1
这是不正确的。没有矛盾
“扩展”关系仅在类之间定义。。。在运行时表示类的类
对象之间。如果您查看java.lang.Class
API,您将看到Class getSuperclass()
和isAssignableFrom(Class)
等方法。。。尽管isAssignableFrom
正在测试“子类型”关系。请注意,这些方法将另一个类作为参数,或返回另一个类
类和实例之间没有“继承”或“扩展”关系。运行时对象之间也没有这种关系。java.lang.Class
扩展了java.lang.Object
这一事实在这里并不相关
如果#1仍然成立,我猜这意味着#3只是说类的“运行时表示”是类java.lang.class的实例,它是java.lang.Object的子类
这是正确的
。。。。但是类本身是java.lang.Object的子类
这也是正确的
然而,需要注意的是,这两个属性并不是直接从对方而来的。类和表示类的运行时类之间存在相似的外观关系,这(有点)巧合。您混淆了类和类的实例。类是类类
的实例,类
与所有类一样,是对象
的子类。例如,String
的实例不是Class
的实例,也不是Class
的子类。只是<<代码>字符串类本身是类< /C> >(而不是<代码>字符串的实例)。(真的让你心烦,认为类<代码>类< /代码>本身就是<代码>类< /代码>的一个实例,而且,类<代码>对象< /代码>也是<代码>类< /代码>的实例。(哦,Class clazz=Class.Class
起作用了。现在我真的很困惑。)如果它们存储在*.object
文件中会不会不那么让人困惑?@HotLicks我不明白。这是个玩笑吗?@HotLicks我不明白。你是说我的答案中有什么可以改进的吗?@HotLicks让我成为“对象”的“类”非常低我能说什么呢?我的内心是一个老装配工——根本不用上课。谢谢!我现在明白了——认为类是对象的一个子类型似乎有点奇怪——但一旦我意识到这一点,它就有了意义