【问题标题】:Understanding when to use inheritance to allow one class to use instances of another了解何时使用继承来允许一个类使用另一个类的实例
【发布时间】:2012-04-30 15:33:19
【问题描述】:

在创建类时,是否有关于何时使用继承以及何时将不使用继承的新类导入另一个类的规则?

这是一个例子:

我创建了一个名为Person 的类,然后创建了许多Person 对象。

然后我创建一个名为House 的子类。使用继承和属性,我所有的Person 对象现在都可以拥有House

然后,我创建了一个名为 Car 的子类,因此我所有的 Person 对象现在都有 Houses 和 Cars。

等等……等等……

我现在有这个类序列:

NSObject

对于上述场景,我的逻辑(我是 Objective-C 初学者)告诉我,我有两种不同的方式来产生相同的结果:

  1. 如上所述,或
  2. 在没有继承的情况下创建每个类,然后将其作为 ivar 导入 Person - 例如,House 的实例现在成为一种类型,然后使用属性将其导入 Person 对象。李>

请原谅我缺乏术语和理解。如果需要,我可以上传一个代码示例,但更多的是关于何时以及何时不使用继承的一般问题。

【问题讨论】:

标签: objective-c oop inheritance composition


【解决方案1】:

这个问题不是 Objective-C 特有的:关于何时使用继承的指南对于所有面向对象的语言都是相同的,它基于 可替代性,由 Liskov Substitution Principle 总结:

如果 S 是 T 的子类型,则 T 类型的对象可以替换为 S 类型的对象

换句话说,只有当你可以说“{derived} is a {base}>”时才使用继承;当你为“{owner} has a {something}”建模时,使用合成

  • 学生是一个人——继承
  • 汽车是一种交通工具——继承
  • 有一个房子 -- 组成(ivar 或财产)
  • 汽车有一个(n)引擎 -- 组成(ivar 或属性)

【讨论】:

  • 非常感谢你真正回答了我的问题并给了我一个要坚持的规则。目前,继续继承每个类似乎更容易,但随着我对 Obj-C 的了解更多,我相信它会更有意义。
猜你喜欢
  • 2017-08-23
  • 2014-11-22
  • 2012-04-29
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2012-01-31
  • 2013-08-12
  • 2012-02-06
相关资源
最近更新 更多