class Base
{
}
class Derive:Base
{
}
Base b=new Derive();
上面的代码有效,但为什么我们能够创建一个派生类对象并将其分配给基类引用。 此外,对象变量“b”将能够访问所有非私有变量和类Base的方法,即使它正在引用Derive Class。 是什么让这成为可能,为什么引用Derive Object的对象变量'b'能够访问Base Class而不是Derive Class。
答案 0 :(得分:3)
允许上述代码工作的理论称为substitution principle:当Derived
是Base
的子类型时,这形成了“is-a”关系。替换原则假定,无论何处Base
的实例,都可以用Derived
的实例替换。
以后无法访问Derive
类的属性和方法的原因是(至少对计算机而言)没有任何迹象表明类型Base
的变量包含一个实例键入Derive
,允许访问这些属性/方法。如果您使用其他方法而不是DerivedToo : Base
的其他类Derive
,如果您假定Base
变量来保存Derive
实例,则可以快速查看该程序如何中断。
答案 1 :(得分:1)
我认为这是多态性问题而不是继承问题。
派生类的一个关键特性是指向派生类的指针与指向其基类的指针类型兼容。使用多态性,您可以利用此功能。
Polymorhism允许您在运行时通过基类引用调用派生类方法。当您需要将一组对象分配给一个数组然后调用它们的每个方法时,这很方便。它们不一定必须是相同的对象类型。但是,如果它们通过继承关联,则可以将它们作为继承类型添加到数组中。