【问题标题】:Is there any technical difference between a subclass and an inherited class?子类和继承类之间有什么技术区别吗?
【发布时间】:2011-09-24 02:01:22
【问题描述】:

从另一个类继承的类和作为它的子类的类之间有什么技术区别吗? 下面代码中A和B有什么区别:

一)

public class foo {
 ...
 private class bar {...}
}

B)

public class foo { ...}

private class bar extends foo {...}

【问题讨论】:

标签: oop class subclass inheritance


【解决方案1】:

您混淆了术语。子类与继承类相同。

在示例 A 中,bar 是一个内部类。内部类就像嵌套类型。 bar 可以看到来自 foo 的所有私人内容,但它本身不是 foo(你不能将 bar 转换为 foo)。

【讨论】:

    【解决方案2】:

    在 A) 类 bar 不是从类 foo 继承的。

    在 B) 中,类 bar 子类,或者是 foo 的继承类。子类和继承类是同义词。

    【讨论】:

      【解决方案3】:

      在继承的情况下,您可以将派生类视为其基类。也就是说,您可以保留一组基类引用并调用它们的方法,而无需知道实际对象是否属于任何派生类型,如果是的话,是哪个。这是一个重要的语义概念。

      在成员类的情况下,内部类只是外部类的一个实现细节,对消费者来说甚至是不可见的。即使它是可见的,它也只是foo 类的一个特性。您可以看到这两种情况在语义上非常不同,您必须选择最准确地代表您的实际数据模型的一种。

      技术上,由于各种虚函数调用,派生类的重量可能会稍微重一些,但细节取决于您的语言和具体情况。

      【讨论】:

        【解决方案4】:

        在您的示例中 A) bar 不是“子类” - 它是一个 嵌套 类。

        有关嵌套类的用途的更多信息,请参阅此问题:Why Would I Ever Need to Use C# Nested Classes

        【讨论】:

          【解决方案5】:

          当使用 B) bar 也是一个 foo。它从 foo 继承所有成员变量和方法。 在 A) 中,bar 只能访问 foo 的方法,但它本身没有这些方法。那就不是 foo 了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-01-10
            • 1970-01-01
            • 2017-03-30
            • 1970-01-01
            • 2011-01-05
            • 2010-10-06
            • 2016-01-26
            • 2015-02-22
            相关资源
            最近更新 更多