子类和继承类之间是否存在技术差异?

时间:2011-06-28 07:22:36

标签: oop class subclass inheritance

从另一个类继承的类与作为其子类的类之间是否存在技术差异? 以下代码中A和B之间的区别是什么:

A)

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

B)

public class foo { ...}

private class bar extends foo {...}

5 个答案:

答案 0 :(得分:12)

你在混合条款。子类与继承的类相同。

在示例A中,bar内部类。内部类就像嵌套类型。 bar可以查看来自foo的所有私有内容,但它本身不是foo(您无法将bar投射到foo)。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

使用B)栏也是foo。它继承了foo的所有成员变量和方法。 在A)栏只能访问foo的方法,但它本身没有。那不是foo。

答案 3 :(得分:0)

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

有关嵌套类用于:Why Would I Ever Need to Use C# Nested Classes

的更多信息,请参阅此问题

答案 4 :(得分:0)

在A)类栏中不是继承自类foo。

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