class Base
{
}
class Derive:Base
{
}
Base b=new Derive();
上面的代码有效,但是为什么我们能够创建派生类的对象并将其分配给基类引用。 此外,对象变量“b”将能够访问类基类的所有非私有(private)变量和方法,即使它引用派生类。 是什么使这成为可能,为什么引用派生对象的对象变量“b”能够访问基类而不是派生类。
最佳答案
允许上述代码工作的理论称为 substitution principle :当 Derived
是 Base
的子类型时,这就形成了“is-a”关系。替换原则假定只要需要 Base
实例,它就可以被 Derived
实例替换。
稍后无法访问 Derive
类的属性和方法的原因是(至少对于计算机而言)没有任何迹象表明 Base
类型的变量存在code> 包含一个 Derive
类型的实例,它将允许访问这些属性/方法。如果您使用另一个类 DerivedToo : Base
,它具有除 Derive
之外的其他方法,您很快就会发现,如果您假设 Base
变量为持有一个Derive
实例。
关于oop - 继承基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6758693/