博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【32】确定你的public继承塑模出Is-A关系
阅读量:4940 次
发布时间:2019-06-11

本文共 735 字,大约阅读时间需要 2 分钟。

1、public继承表示Is-A关系,也就是满足里氏代换。与之相对应的,private继承表示根据某物实现出,不满足里氏代换。子类对象初始化父类引用,编译通不过。

2、考虑下面的需求,企鹅继承鸟,Bird暴露virtual Fly接口。现在出问题了,因为Penguin不会飞,不提供Fly接口。怎么办?

  a、Penguin在重写的Fly方法中,抛出一个异常。

  b、上面的解决办法不好,因为它表示的意义不是说Penguin不会飞,而是说尝试让Penguin飞,会出现错误。最大的问题是:运行期才发现错误。我们知道:好的接口可以防止无效的代码通过编译。现在思考,解决解决这个问题。这个问题的关键是:并不是所有的鸟都会飞,因此Bird不应该暴露Fly接口。解决办法就是:Bird不暴露Fly接口,Penguin也不暴露Fly接口,其他会飞的鸟暴露Fly接口。这样,用户就没办法对Penguin调用Fly接口。

3、再考虑矩形和正方形,从几何角度讲,正方形是一种矩形。从软件设计角度讲,正方形是矩形吗?应该使用public继承吗?思考:对矩形可以单独设置宽度,而不影响高度。但是对于正方形,设置宽度,要求高度随之变化,否者就不是正方形了。因此不能使用public继承。与此类似的还有:路径是String吗?路径应该public继承String吗? 不能。因为一个String加上另一个String还是一个有效的String,而一个路径加上另一个路径就不是一个路径了。

4、代码通过编译,不代表可以正常运行。因此,应该尽早暴露出问题,好的接口应该防止无效的代码通过编译。

转载于:https://www.cnblogs.com/nzbbody/p/3502516.html

你可能感兴趣的文章
English Learning Daily Note of Fourth
查看>>
Node.js 教程
查看>>
windows系统和centos双系统安装引导项修改
查看>>
理解数据类型与数学运算:求和、温度转换
查看>>
kernel panic 分析(camera导致的mem越界)
查看>>
文档流
查看>>
xcode加载静态链接库.a文件总是失败
查看>>
加密签名
查看>>
7.volatile关键字
查看>>
【转载】古典密码
查看>>
python性能优化
查看>>
软件工程的意义
查看>>
如何在Oracle 10g中跟踪SQL
查看>>
android IOC框架学习记录
查看>>
CDOJ 1279 班委选举 每周一题 div2 暴力
查看>>
HDU 5745 La Vie en rose 暴力
查看>>
Day12 线程池、RabbitMQ和SQLAlchemy
查看>>
jQuery中$.each()方法的使用(从业人员项目--添加产品和修改产品,定价时用到了)...
查看>>
《算法导论》第六章----优先级队列(代码实现+部分练习)
查看>>
《Linux/Unix系统编程手册》读书笔记3
查看>>