第一个问题:里氏替换的解释:
里氏替换说的是父类引用指向子类实例;整个过程是这样的:
①new Student(),在堆上开辟一块空间存储student类型的对象;
②在栈上分配一块Person类的内存地址per;
③让per指向堆上的对象;
就这样实现了父类引用指向子类实例。
第二个问题:父类强转为子类
如果父类中存储子类的对象,即父类引用指向子类实例,因为子类继承了父类公开的属性和方法,
父类强制转换为子类,数据不会丢失;
相反,假设一种不可能发生的情形
如果是子类引用指向父类实例,将子类强制转换为父类,子类自己声明的属性和方法将会丢失。
以上,请参考。 |