Object 我认为继承是这三件事的结合,对吗?

Object 我认为继承是这三件事的结合,对吗?,object,inheritance,multiple-inheritance,Object,Inheritance,Multiple Inheritance,A继承B意味着 A拥有B A共享所有B接口 A共享B接口的实现 抽象类类似于objective-c中的@protocol A意味着B 2.A共享所有B接口 至于A拥有B,A共享B的实现,我认为这是可以通过@protocol和category的组合来“推动”的 在任何情况下,这就是继承的全部,对吗 所有权 共享接口 共享实现 如果我在这些方面有任何错误,请任何人纠正我 所有权是的,这基本上是正确的。有些人可能会对“所有权”的说法吹毛求疵。这可能表明B“有a”而不是“B”是aA.在面向对象的行话中,

A继承B意味着

  • A拥有B
  • A共享所有B接口
  • A共享B接口的实现
  • 抽象类类似于objective-c中的@protocol

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

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

    在任何情况下,这就是继承的全部,对吗

  • 所有权
  • 共享接口
  • 共享实现
  • 如果我在这些方面有任何错误,请任何人纠正我


    所有权

    是的,这基本上是正确的。有些人可能会对“所有权”的说法吹毛求疵。这可能表明B“有a”而不是“B”是aA.在面向对象的行话中,has-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 |
            +----------------+
    
    B有一个a
    =========
    +--------------+    +----------------+
    B*B->| A*A|部分|->|浮动A|U字段1|
    |int b|U字段1 |浮点a|U字段2|
    |int b|U field2|+----------------+
    +--------------+
    B是a
    ========
    +----------------+
    
    B*B->| float a|u field1 |这里的“所有权”概念可能有问题。我认为最简单的说法是,当从“B”继承时,“a”做“B”所做的一切,除了“a”决定做一些不同的事情。“a”对“B”没有所有权,除了默认情况下,它充当“B”,直到你告诉它做一些事情不同。

    A确实拥有B的所有权。在存储A的内存中,有B。A有一个引用B的字段,称为super。