class Base
{
}
class Derive:Base
{
}
Base b=new Derive();上面的代码可以工作,但是为什么我们能够创建一个派生类的对象,并将其分配给基类引用。此外,对象变量'b‘将能够访问Class Base的所有非私有变量和方法,即使它引用的是派生类。为什么引用派生对象的对象变量'b‘能够访问基类而不是派生类。
发布于 2011-07-20 15:55:57
允许上述代码工作的理论称为:当Derived是Base的一个子类型时,就形成了一种" is -a“关系。
稍后不能访问Derive类的属性和方法的原因是(至少对于计算机而言)没有任何迹象表明类型为Base的变量包含类型为Derive的实例,从而允许访问这些属性/方法。如果您使用另一个类DerivedToo : Base,它具有Derive以外的其他方法,那么您很快就会看到,如果您假设Base变量保存一个Derive实例,那么程序会如何崩溃。
发布于 2011-07-20 16:00:10
我认为这是多态问题,而不是继承。
派生类的关键功能之一是,指向派生类的指针与指向其基类的指针类型兼容。使用多态性,您可以利用此功能。
多态允许您在运行时通过基类引用调用派生类方法。当您需要将一组对象分配给一个数组,然后调用它们的每个方法时,这很方便。它们不必是相同的对象类型。但是,如果它们通过继承相关,则可以将它们作为继承类型添加到数组中。
https://stackoverflow.com/questions/6758693
复制相似问题