【36】绝不重新定义继承而来的non-virtual方法
2013-12-27 18:42
344 查看
1、绝不重新定义继承而来的non-virtual方法,为什么?
首先想想,non-virtual方法是干什么的?也就是说,它的使用场景。父类的non-virtual方法,其实就是告诉子类,继承实现,子类决定是否继承接口(也就是子类决定是否继续提供接口)。如果重新定义了non-virtual方法,就不符合它的使用场景。
2、如果想重新定义继承而来的方法,应该把父类方法修改为virtual方法,因为virtual方法的使用场景是:父类告诉子类,继承接口,修改实现。
3、如果重新定义了继承而来的non-virtual方法,会出现什么问题呢?
因为non-virtual方法是静态绑定,也就是说,调用non-virtual方法的时候,根据对象的表面类型决议方法,我们知道一个对象的表面类型是可以变来变去的。这样,就表现出神经分裂的不一致行为。
首先想想,non-virtual方法是干什么的?也就是说,它的使用场景。父类的non-virtual方法,其实就是告诉子类,继承实现,子类决定是否继承接口(也就是子类决定是否继续提供接口)。如果重新定义了non-virtual方法,就不符合它的使用场景。
2、如果想重新定义继承而来的方法,应该把父类方法修改为virtual方法,因为virtual方法的使用场景是:父类告诉子类,继承接口,修改实现。
3、如果重新定义了继承而来的non-virtual方法,会出现什么问题呢?
因为non-virtual方法是静态绑定,也就是说,调用non-virtual方法的时候,根据对象的表面类型决议方法,我们知道一个对象的表面类型是可以变来变去的。这样,就表现出神经分裂的不一致行为。
相关文章推荐
- 算法导论第5章5.4概率分析和随机算法
- [iOS开发]推翻错误结论——“Block可以捕获它的声明所在相同作用域的状态。”
- 双引号和单引号
- 用ElasticSearch存储日志
- linux核心版本号的说明
- linux核心版本号的说明
- linq转载
- 监听的instance status blocked分析
- 从 Java 代码调用 C/C++ 的六个步骤
- 排序算法(七):归并排序
- 将阿拉伯数字钱格式转换成中文格式
- paip.log4j 日志系统 参数以及最佳实践
- android之surfaceview画图
- paip.log4j 日志系统 参数以及最佳实践
- DML、DDL、DCL区别
- wince 中使用HttpSendRequest函数POST数据时应该注意的一点
- Python中生成唯一码(uuid的使用)
- 揭秘JavaScript中谜一样的this
- jsonp跨域调用action
- Python模拟http协议初步学习(001)