繁体   English   中英

我认为将继承视为这三件事的组合是否正确?

[英]Am I correct to think of inheritance as a combination of these 3 things?

A继承B意味着

  1. A拥有B.
  2. A共享所有B接口。
  3. A股实现B接口。

抽象类是相似的(例如,在objective-c中的@protocol)。

A实现B意味着2.A共享所有B接口。

至于A拥有B和A共享B的实现,我认为可以通过@protocol和类别的组合来“推动”。

无论如何,这一切都是正确的吗?

  1. 所有权
  2. 共享界面
  3. 分享实施。

如果我在其中任何一个错了,请有人纠正我。

所有权

是的,这基本上是正确的。 有些人可能会对“所有权”主张提出质疑。 这可能表明B“有一个A而不是B”是一个“A.在面向对象的术语中,一个有一个关系通常意味着B的一个字段是指向A对象的指针。 is-a关系意味着B的内存的一部分包含A对象。 对于常见的面向对象语言,继承意味着is-a关系,而不是has-a关系。

考虑这两个草图

B has-a A
=========

        +--------------+    +----------------+
B* b -> | A* a_part    | -> | float a_field1 |
        | int b_field1 |    | float a_field2 |
        | int b_field2 |    +----------------+
        +--------------+

B is-a A
========

        +----------------+
B* b -> | float a_field1 | <- A* a_part_of_b
        | float a_field2 |
        | int   b_field1 |
        | int   b_field2 |
        +----------------+

is-a关系的另一个重要属性是指向子类的指针可以被安全地视为指向超类的指针。 这通常不适用于没有采用转换或提取方法的has-a关系。

这里的“所有权”概念可能存在问题。 我认为最简单的方法就是'A',当继承自'B'时,做'B'所做的一切,除了'A'决定做一些不同的事情。 'A'没有'B'的所有权,除了默认情况下它会充当'B',直到你告诉它做一些不同的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM