class Base
{
}
class Derive:Base
{
}
Base b=new Derive();
上述代码有效,但为什么我们能够创建派生类对象并将其分配给基类引用。 而且,对象变量'b'将能够访问所有非专用变量和Class Base方法,即使它引用了派生类。 是什么使这成为可能,为什么引用派生对象的对象变量'b'能够访问基类而不是派生类。继承基础
class Base
{
}
class Derive:Base
{
}
Base b=new Derive();
上述代码有效,但为什么我们能够创建派生类对象并将其分配给基类引用。 而且,对象变量'b'将能够访问所有非专用变量和Class Base方法,即使它引用了派生类。 是什么使这成为可能,为什么引用派生对象的对象变量'b'能够访问基类而不是派生类。继承基础
允许上述代码工作的理论被称为substitution principle:当Derived
是Base
的子类型时,这形成了“是-α”关系。替代原则假定,无论预计哪个实例为Base
,它都可以由Derived
的实例替代。
你不能访问以后的Derive
类的属性和方法的原因是(至少对一个计算机)有任何迹象表明Base
类型的变量包含Derive
类型的一个实例,这将允许访问这些属性/方法。如果您采用其他方法DerivedToo : Base
(Derive
以外的其他方法),则可以快速了解如果您假设Base
变量用于保存Derive
实例,那么程序可能会中断。
我认为这是多态问题而不是继承。
派生类的一个关键特性是指向派生类的指针与指向其基类的指针是类型兼容的。使用多态可以充分利用这个特性。
Polymorism允许您在运行时通过基类引用调用派生类方法。当你需要将一组对象分配给一个数组,然后调用它们的每个方法时,这很方便。它们不一定必须是相同的对象类型。但是,如果它们通过继承关联,则可以将它们作为继承类型添加到数组中。
我不认为代码会起作用,甚至不会编译。 – pierrotlefou