从另一个类继承的类与作为其子类的类之间是否存在技术差异? 以下代码中A和B之间的区别是什么:
A)
public class foo {
...
private class bar {...}
}
B)
public class foo { ...}
private class bar extends foo {...}
答案 0 :(得分:12)
你在混合条款。子类与继承的类相同。
在示例A中,bar
是内部类。内部类就像嵌套类型。 bar
可以查看来自foo
的所有私有内容,但它本身不是foo
(您无法将bar
投射到foo
)。
答案 1 :(得分:2)
在继承情况下,您可以将派生类视为其基类。也就是说,你可以保留一个基类引用的集合并调用它们的方法,而不需要知道实际的对象是否是任何派生类型,如果是,那么。这是一个重要的语义概念。
在成员类的情况下,内部类只是外部类的实现细节,甚至消费者都看不到。即使它是可见的,它也只是foo
类的一个特征。您可以看到这两种情况在语义上非常不同,您必须选择最准确地代表实际数据模型的情况。
技术上,由于各种虚函数调用,派生类的重量可能会稍微重一些,但细节取决于您的语言和具体情况。
答案 2 :(得分:0)
使用B)栏也是foo。它继承了foo的所有成员变量和方法。 在A)栏只能访问foo的方法,但它本身没有。那不是foo。
答案 3 :(得分:0)
在您的示例中A)bar
不是“子类” - 它是嵌套类。
答案 4 :(得分:0)
在A)类栏中不是继承自类foo。
在B)中,类栏是的子类,或者是foo的继承类。子类和继承类是同义词。