提到“子类”和“子类型”是不同的
来源:互联网 发布:功能复古相机软件 编辑:程序博客网 时间:2024/06/10 02:58
提到“子类”和“子类型”是不同的,替换原则只适合于子类型关系,而一般编程语言只是考虑了子类关系,子类说明了新类是继承自父类,而子类型强调的是新类具有父类一样的行为(未必是继承)。那么,什么时候才应该使用继承?那就是符合子类型关系的时候,或者一般所说的”is a"关系,你必须保证新类的行为与父类完全一致!!!在任何使用父类的场合,新类应该表现一样的行为。
经典案例:正方形是长方形的子类,但不是子类型
如果让正方形当做是长方形的子类,会出现什么情况呢?我们让正方形从长方形继承,然后在它的内部设置width等于height,这样,只要width或者height被赋值,那么width和height会被同时赋值,这样就保证了正方形类中,width和height总是相等的.现在我们假设有个客户类,其中有个方法,规则是这样的,测试传人的长方形的宽度是否大于高度,如果满足就停止下来,否则就增加宽度的值.现在我们来看,如果传人的是基类长方形,这个运行的很好.根据LSP,我们把基类替换成它的子类,结果应该也是一样的,但是因为正方形类的width和height会同时赋值,这个方法没有结束的时候,条件总是不满足,也就是说,替换成子类后,程序的行为发生了变化,它不满足LSP.(里氏代换原则)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/daryl715/archive/2007/05/29/1629841.aspx
- 提到“子类”和“子类型”是不同的
- 面向对象概念-子类和子类型
- 父类和子类的同名成员函数参数格式相同,返回值类型不同
- java 中Object类里面的 getClass函数是final类型的, 为何子类调用, 结果确不同
- java中子类与子类型的区别
- Nothing是任何类型的子类这个定义非常好。
- 在网络营销正规军中,提到秦火火和尔玛,他们的评价是“路子邪”
- java和C++子类中重载的不同
- 子类调用父类方法:c++和java的不同
- 值类型和引用类型的不同
- 你能描述一下渐进增强和优雅降级之间的不同吗?如果提到了特性检测,可以加分。
- 【理论实践】size_t和std:size_t可能是不同的类型定义,只是定义为相同的类型
- 不同字符的数量是fibonacci数的子字符串
- 灾备中经常提到的RTO和RPO
- 好记性不如烂笔头77-多线程-Thread子类的线程对象是不同的
- NSDataDetector是NSRegularExpression的子类NSDataDetector和NSTextCheckingResult的使用
- Java中父类和子类的类型转换解惑
- 5.1 父类和子类的类型转换总结
- 没有可用于当前位置的源代码
- Hashtable和HashMap的区别
- 私有构造函数,私有析构函数
- HDU 3546(高精度,java写)
- Object expected
- 提到“子类”和“子类型”是不同的
- 童继龙 IT 目标规划的介意
- VC++abc之一
- Zend Framework学习 之错误处理
- 20个开发人员非常有用的Java功能代码
- 如何使用VSTS写单元测试
- mmap and DMA
- ssh无密码登入设置
- 软考——编译原理