【问题标题】:Is Object a superclass of abstract classes?Object 是抽象类的超类吗?
【发布时间】:2012-11-07 22:57:39
【问题描述】:

我想知道Object 是否也是“松散”抽象类的超类,即不扩展其他抽象类的抽象类。我不认为这很重要。但是,当把所有东西放在一起时,这个“正式”的措辞如何。

以下支持和反驳我看到的主题行中的 Q:

支持(对上面的 Q 表示“是”):i.) 具体类可以从抽象类继承,ii.) 每个类都是 Object 的后代,以及 iii.) 每个类(Object 除外) 只有一个超类。如果Object 不是抽象类的超类, 那么 (iii) 对于Object 的特殊情况,必须违反——“一个类可以有两个超类,只要其中一个是Object,另一个是抽象的。”

矛盾(对 Q 表示“否”):抽象类不能从属于具体类,而 Object 是具体的。但是,这也可以表述为“Object 类的特殊情况”。

是一方面比另一方面更多,还是仅仅是“两者兼而有之——Object 类的例外”。提前致谢。

注意:我阅读了关于 Why java.lang.Object is not abstract?

更正我在上面原始消息中的明显错误: 抽象类显然可以从具体类继承。这也使 Object 成为它们的超类。

【问题讨论】:

    标签: java object inheritance


    【解决方案1】:

    是的,Object 是每个抽象类的超类型,而且——独一无二地——甚至是接口的超类型。

    抽象类不能从属于具体类,[…]

    这不是真的。

    【讨论】:

      【解决方案2】:

      我认为您感到困惑的是抽象类继承具体类是合法的。这是相当罕见的,但它可能会发生。 This question 展示了很多这样的例子。

      【讨论】:

      • 感谢您提供的链接——它成功了。我一直缺少从具体类继承的抽象类。
      • 几乎所有的例子都有扩展其他具体类的具体类。事实上,我看到的唯一反例是来自 ASP.NET(不是 Java)的示例类层次结构。如果您在那里看到不同的反例,为什么不在这里将其复制到您的答案中,而不是让读者梳理该页面?
      【解决方案3】:

      是的,所有“松散”的抽象类都继承Object。抽象类继承具体类并不常见,但这是合法的。

      【讨论】:

        猜你喜欢
        • 2022-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-03
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多