强制类型转换什么时候用到
2016-01-10 22:13
211 查看
一.向下类型转换(子类转父类)。
当子类有的方法,父类中没有的时候,这时候就需要将父类转换为子类,这样就可以使用子类里有父类里没有的方法了。
例如:Fruit类里有grow()方法,Apple类继承自Fruit类,重写了Fruit类里的grow()方法,并且自己增加了一个sing()方法。
这时如果有一个父类型(Fruit)的引用f指向子类型(Apple)的对象(Fruit f = new Apple()),这时的f里就只有一个grow()方法,并不能使用
sing()这个方法,因为f是Fruit的引用,当使用多态方式调用方法时,首先检查父类中是否有 grow()方法,如果没有则编译错误;如果有,再去调用子类的 grow()方法。
所以如果这时想调用sing()方法的话,就得向下强制类型转化Apple a = (Apple)f。
注意:是谁的引用才能调用谁的方法。是Fruit的引用就不能调用Apple里的grow()方法,只有强制转换成Apple类型的引用才能调用grow()方法。
当子类有的方法,父类中没有的时候,这时候就需要将父类转换为子类,这样就可以使用子类里有父类里没有的方法了。
例如:Fruit类里有grow()方法,Apple类继承自Fruit类,重写了Fruit类里的grow()方法,并且自己增加了一个sing()方法。
这时如果有一个父类型(Fruit)的引用f指向子类型(Apple)的对象(Fruit f = new Apple()),这时的f里就只有一个grow()方法,并不能使用
sing()这个方法,因为f是Fruit的引用,当使用多态方式调用方法时,首先检查父类中是否有 grow()方法,如果没有则编译错误;如果有,再去调用子类的 grow()方法。
所以如果这时想调用sing()方法的话,就得向下强制类型转化Apple a = (Apple)f。
注意:是谁的引用才能调用谁的方法。是Fruit的引用就不能调用Apple里的grow()方法,只有强制转换成Apple类型的引用才能调用grow()方法。
相关文章推荐
- Linux DNS基础知识与配置
- poj-1062-昂贵的聘礼
- bash 的进站与欢迎讯息: /etc/issue, /etc/motd
- C++ 2010 与MATLAB2014a混合编程教程(1)
- Android Button的触发事件中的一个问题
- linux GD库安装
- Sentinel-1雷达数据可以免费下载
- 【架构设计】-MVC宏观总结
- libevent sample--分析及其源码阅读
- MFC拆分字符串
- phpstorm配置yaf代码自动补全提示
- iOS UITableView(十一) tableView的几个小技巧
- 面试经历---广州金砖信息技术有限公司(2015年11月25日上午面试)
- ng-class、ng-style、ng-href、ng-attr-title
- COM 组件设计与应用(三)——数据类型
- java集合框架总结
- 高速网络下的http协议优化
- TNS-12547 Linux Error: 104: Connection reset by pe (转载)
- 没事,就当故事听吧
- Java多线程学习(吐血超详细总结)