【问题标题】:When Object Class is added as a super class? [closed]何时将对象类添加为超类? [关闭]
【发布时间】:2017-02-20 16:44:23
【问题描述】:

我正在浏览 Object 类 JAVA-docs,我们知道 Object 是所有类的基类。但我想知道,何时将 Object 类添加为超类? 它是编译时还是运行时(理想情况下应该在编译时)?

另外,正如我已经阅读过的,JVM 会自动检查一个类是否从父类继承,那么它不会将 Object 添加为超类以避免继承钻石问题,但是在抽象类/内部类的情况下会发生什么? Super class-Object 将添加到哪里?

在创建任何新的内置对象示例 HashMap 时,我们可以从源代码中看到内部工作,类似地,是否可以在 Java 源代码中的任何地方看到此功能,或者它是由内部编译器完成的?

【问题讨论】:

  • 这可能是Software Engineering的问题。
  • 类继承不可能在 Java 中引入“钻石问题”,因为除Object 之外的每个类都只有一个直接超类。 Object 没有超类,是所有类层次结构的根。正如下面的答案所暗示的那样,对于任何类,编译器都会确定 Object 何时需要成为直接超类。您是否阅读过 Java 语言规范 (JLS) 或 Java 教程?这些解释它,前者比较详细。熟悉文档并使用它是很好的。
  • @Dev-iL 在引用其他网站时,指出cross-posting is frowned upon 通常会有所帮助

标签: java inheritance jvm jvm-languages


【解决方案1】:

如果不指定超类,默认java.lang.Object。而超类是在编译时确定的。对于 abstractinnerstatic)类,没有 explicit 超类型;超类型是java.lang.Object

【讨论】:

  • 是否可以在任何 JVM 源代码中看到这一点?还是我需要检查类加载器?
  • @Harry javap -vclass 文件上,您会在字节码中看到它。或者您可以致电getClass().getSuperclass().getName() 或阅读 JLS。
  • 或者你可以阅读文档...
  • @Harry 编译器将 any 类的父类设置为 java.lang.Object,除非它是 Object 类或者它扩展了另一个类。
  • @Harish 您可以在没有显式超类的类上使用 java.lang.Object 方法这一事实告诉您,就好像您已经编写了“扩展对象”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 2021-01-23
  • 2014-01-07
相关资源
最近更新 更多