oop - 继承基础知识

标签 oop inheritance

class Base
{

}

class Derive:Base
{

}

Base b=new Derive();

上面的代码有效,但是为什么我们能够创建派生类的对象并将其分配给基类引用。 此外,对象变量“b”将能够访问类基类的所有非私有(private)变量和方法,即使它引用派生类。 是什么使这成为可能,为什么引用派生对象的对象变量“b”能够访问基类而不是派生类。

最佳答案

允许上述代码工作的理论称为 substitution principle :当 DerivedBase 的子类型时,这就形成了“is-a”关系。替换原则假定只要需要 Base 实例,它就可以被 Derived 实例替换。

稍后无法访问 Derive 类的属性和方法的原因是(至少对于计算机而言)没有任何迹象表明 Base 类型的变量存在code> 包含一个 Derive 类型的实例,它将允许访问这些属性/方法。如果您使用另一个类 DerivedToo : Base,它具有除 Derive 之外的其他方法,您很快就会发现,如果您假设 Base 变量为持有一个Derive实例。

关于oop - 继承基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6758693/

相关文章:

c++派生类问题

php - 如何在链接类的实例时检索祖先

c++ - 非静态成员的无效使用

python 3 : Class inheritance and private fields

java - 扩展另一个泛型类的泛型类的泛型类型参数上绑定(bind)不匹配错误

java - 使用上限通配符时不兼容的类型

java - Hibernate:跨多个表的@UniqueConstraint?

java - 对象的变量——Java

php - 使用 php 从数据库输出数据的最佳方法是什么?

java - 防止静态 block 的继承