zoukankan      html  css  js  c++  java
  • 条款32:确定你的public继承塑模出is-a关系

    1、何谓is-a关系?

    比如说两个类A和B,假如B公开继承自A,那么就意味着:B一定属于类A,但是A却不一定属于B。一个简单的例子,假如A是塑模的是人,而B塑模的是学生。那么一般来讲:学生一定属于人,人却不一定属于学生。

    2、编程时,is-a关系可能是违背由现实生活得来的经验直觉的

    例子1:企鹅与鸟
    现实生活中的经验:企鹅是一种鸟,但是编程时却不能将二者塑模成is-a 关系。

    因为一般而言鸟都是会飞的,所以我们很自然的在鸟类中会写一个成员方法:飞行。
    但是,企鹅会飞吗?显然不会,那么企鹅是一种鸟,但是企鹅却不会飞,这就会导致如果将二者塑模成is-a 关系时出现问题。

    可以采取的做法:在鸟基类中不写:飞行这种行为。继承自会飞的鸟的类中写上飞行方法。

    例子2:正方形与矩形
    现实生活中的经验:正方形是一种矩形,但是编程时却不能将二者塑模成is-a 关系。

    因为对于矩形来说,有一种行为,即:可以只改变高度,而不改变宽度。但是,对于正方形来说,只要改变了高度或者宽度中的任意一个,另外一个就应该被改变,否则它不再属于正方形。于是,一种可以作用于矩形的行为,却不能作用于正方形。因此,不能将二者塑模成is-a关系。

    总之,如果将两个类A、B,想要塑模成公共继承关系,B继承自A:那就必须做到A的所有行为都可以作用在B上。这才是能够塑模成is-a关系的关键。

  • 相关阅读:
    Linux PHP7的openssl扩展安装
    nginx 413 request entity too large解决办法
    html table表格列数太多添加横向滚动条
    Font Awesome-用CSS实现各种小图标icon
    PHP面试专用笔记精简版
    如何理解PHP的单例模式
    HTTP中的header头解析说明
    9.java.lang.ClassCastException
    7.java.lang.IllegalAccessException
    8. java.lang.ArithmeticException
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764195.html
Copyright © 2011-2022 走看看