基类和派生类的转换,两个原则(读书笔记)

1.关注对象原则:调用子类还是父类的方法,取决于创建的对象是子类对象还是父类对象,而不是他的应用类型。例如:Bird bird2=new Chicken()时,我们关注的是其创建的对象为Chicken类型,因此子类将继承父类的字段和方法,或者覆写父类的虚方法,而不用关注bird2的引用类型是否为Bird。引用类型的区别决定了不同的对象在方法表中不同的访问权限。

2.执行就近原则

对于同名字段后者方法,编译器是按照其顺序来查找引用的,也就是首先访问它创建最近的字段或者方法,例如上例中的bird2,是Bird类型,因此会先访问Bird里的类型或者方法。

如果从c++里的继承来分析也是可以说的通的:

在C++中,基类和派生类的转换是这样的:

(1) 派生类对象可以向基类对象赋值

A a1;//A是B的父类,声明a1

B b1;//声明b1;

a1=b1;

可以用子类对象对其基类对象赋值,在赋值的时候,舍弃派生类自己的成员。实际上,所谓赋值只是对数据成员赋值,对成员函数不存在赋值问题。

基类和派生类的转换,两个原则(读书笔记)

 

(2) 派生类对象可以替代基类对象向基类对象的引用进行赋值或初始化。

A a1;

B b1;

A &r=a1;

r=b1;

此时,r并不是b1的别名,也不与b1共享同一段存储单元,它只是b1中基类部分的别名。r与b1中的基类共享一段存储单元,r与b1具有相同的起始地址。

基类和派生类的转换,两个原则(读书笔记) 

 

 

你可能感兴趣的:(读书笔记)