zoukankan      html  css  js  c++  java
  • 【32】确定你的public继承塑模出Is-A关系

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

  • 相关阅读:
    java反射注解妙用-获取所有接口说明
    npm设置和查看仓库源
    正则表达式-linux路径匹配
    在vue中使用echarts图表
    设计模式-简单工厂模式
    设计模式
    Redis实现世界杯排行榜功能(实战)
    开发十五、k3cloud单据的附件自动上传到钉钉的审批单中
    微盟与金蝶k3cloud、erp库存对接
    开发一、k3cloud内服务工单过滤在库批号
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3502516.html
Copyright © 2011-2022 走看看