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关系的关键。

  • 相关阅读:
    asp 向另一个页面传递数组
    TSQL Program Rule and Tips 规则与优化
    虚函数 纯虚函数 抽象类
    static (c#)
    简单游标
    抽象方法 抽象类 (abstract)
    清理电脑
    泛型学习
    继承(对象生命周期) + 覆盖[new](索引函数) + 重载[virtual/override]
    #干货向#jQuery性能优化指南
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764195.html
Copyright © 2011-2022 走看看