5.1 父类和子类的类型转换总结
前提:父类和子类之间,严格遵循“is-a”的关系。例如,雇员和经理,经理是雇员,但雇员不一定是经理。
(一)把子类的对象,传递给父类的变量,很容易理解,直接赋值即可,不需要采用强制类型转换。(一个经理对象,当然可以属于雇员类)
(二)把父类对象,传递给子类变量,较难理解,必须采用强制类型转换的方式赋值。(一个雇员,不一定属于经理类)
简单例子如下所示:
直接传递,和强制转换的方式如代码所示。
注:一般数值的强制转换,如double i =3.5;则强制转换为int型,int j = (int) i;最后的结果是,3.5舍去了小数部分。同理,子类和父类的类型转换,也存在这种情况。
如代码示例中,父类Employee类没有定义实例域,子类Manage类里,定义了两个示例域。
(1)当把父类的对象(显然不能调用子类的private实例域),传递给子类变量后,,,其可以调用子类的private实例域。
(2)当把子类的对象(显然可以调用子类的private实例域),传递给父类变量后,,,其不能调用子类的private实例域,提示错误。
目前可以这样理解,类型转换,必然附带有一定的成本,或是损失部分内容(一般是,子类对象传递给父类变量),或是附加新的内容(父类对象传递给子类变量)。因为一个变量就行有什么性质,是由定义它的修饰词(int、double...以及类名等)决定的