【问题标题】: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 类的一个特性。您可以看到这两种情况在语义上非常不同,您必须选择最准确地代表您的实际数据模型的一种。
技术上,由于各种虚函数调用,派生类的重量可能会稍微重一些,但细节取决于您的语言和具体情况。
【解决方案5】:
当使用 B) bar 也是一个 foo。它从 foo 继承所有成员变量和方法。
在 A) 中,bar 只能访问 foo 的方法,但它本身没有这些方法。那就不是 foo 了。